{
  "contractName": "StowPermissions",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "hub",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "permissions",
      "outputs": [
        {
          "name": "canAccess",
          "type": "bool"
        },
        {
          "name": "dataUri",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "destroy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_recipient",
          "type": "address"
        }
      ],
      "name": "destroyAndSend",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_hub",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "viewer",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "StowAccessGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "viewer",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "StowAccessRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "delegate",
          "type": "address"
        }
      ],
      "name": "StowPermissionDelegateAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "dataUri",
          "type": "string"
        },
        {
          "indexed": true,
          "name": "viewer",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "policy",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "isOk",
          "type": "bool"
        },
        {
          "indexed": false,
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "StowPolicyChecked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Pause",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpause",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        }
      ],
      "name": "checkAccess",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "delegate",
          "type": "address"
        }
      ],
      "name": "addDelegate",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        },
        {
          "name": "dataUri",
          "type": "string"
        }
      ],
      "name": "grantAccess",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        },
        {
          "name": "owner",
          "type": "address"
        },
        {
          "name": "dataUri",
          "type": "string"
        }
      ],
      "name": "grantAccessbyDelegate",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        },
        {
          "name": "dataUri",
          "type": "string"
        },
        {
          "name": "policies",
          "type": "address[]"
        }
      ],
      "name": "grantPolicyBasedAccess",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        }
      ],
      "name": "revokeAccess",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "name": "viewer",
          "type": "address"
        },
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "revokeAccessbyDelegate",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260008060146101000a81548160ff02191690831515021790555034801561002a57600080fd5b5060405160208061299b83398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506128bd806100de6000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e1691191461010b578063220e5b4b1461018c578063365a86fc146102255780633e1fd0da1461027c5780633ec50c6c146102e55780633f4ba83a146103ba5780635c975abb146103d1578063710ed77a14610400578063715018a6146104895780637473f4e0146104a057806383197ef0146105415780638456cb59146105585780638d53b2081461056f5780638da5cb5b146105d8578063e58432421461062f578063e71bdf41146106aa578063f2fde38b14610705578063f5074f4114610748575b34801561010857600080fd5b50005b34801561011757600080fd5b506101726004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200191909192939192939050505061078b565b604051808215151515815260200191505060405180910390f35b34801561019857600080fd5b5061020b6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610b32565b604051808215151515815260200191505060405180910390f35b34801561023157600080fd5b5061023a61115f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028857600080fd5b506102cb6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611185565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b506103346004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111f8565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037e578082015181840152602081019050610363565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156103c657600080fd5b506103cf6112ce565b005b3480156103dd57600080fd5b506103e661138c565b604051808215151515815260200191505060405180910390f35b34801561040c57600080fd5b5061046f6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061139f565b604051808215151515815260200191505060405180910390f35b34801561049557600080fd5b5061049e611608565b005b3480156104ac57600080fd5b506105276004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200191909192939192939050505061170a565b604051808215151515815260200191505060405180910390f35b34801561054d57600080fd5b506105566119a8565b005b34801561056457600080fd5b5061056d611a3d565b005b34801561057b57600080fd5b506105be6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611afd565b604051808215151515815260200191505060405180910390f35b3480156105e457600080fd5b506105ed611e6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063b57600080fd5b50610690600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e94565b604051808215151515815260200191505060405180910390f35b3480156106b657600080fd5b506106eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ec3565b604051808215151515815260200191505060405180910390f35b34801561071157600080fd5b50610746600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f1565b005b34801561075457600080fd5b50610789600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612258565b005b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561081357600080fd5b505af1158015610827573d6000803e3d6000fd5b505050506040513d602081101561083d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156108e857600080fd5b505af11580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b8101908080519060200190929190505050151561092e57600080fd5b84338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b505050506040513d60208110156109f757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610a7e57600080fd5b505af1158015610a92573d6000803e3d6000fd5b505050506040513d6020811015610aa857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610adb57600080fd5b610b1987873388888080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b1515610b2457600080fd5b600192505050949350505050565b6000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505050506040513d6020811015610bea57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b505050506040513d6020811015610cbf57600080fd5b81019080805190602001909291905050501515610cdb57600080fd5b8a338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d7a57600080fd5b505af1158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b505050506040513d6020811015610e5557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610e8857600080fd5b60006001028d6000191614151515610e9f57600080fd5b600095505b88889050861015611102578888878181101515610ebd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515610f1857600080fd5b8493508373ffffffffffffffffffffffffffffffffffffffff16639cf4898c8e8e8e8e6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505095505050505050602060405180830381600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff168e600019167f5e2cd7ffbf87e3d8cef206b6758340ae4d51bea6fc30781e411157467c0428a88e8e88336040518080602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825286868281815260200192508082843782019150509550505050505060405180910390a48215156110f557600080fd5b8580600101965050610ea4565b6111408d8d338e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b151561114b57600080fd5b600196505050505050509695505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060026000846000191660001916815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16905092915050565b6002602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b5050505050905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561132957600080fd5b600060149054906101000a900460ff16151561134457600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600060149054906101000a900460ff1681565b600081600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561143757600080fd5b84838073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b505050506040513d602081101561150057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d60208110156115b157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115e457600080fd5b6115ef8787876124c4565b15156115fa57600080fd5b600193505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561166357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600083600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156117a257600080fd5b86858073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561184157600080fd5b505af1158015611855573d6000803e3d6000fd5b505050506040513d602081101561186b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156118f257600080fd5b505af1158015611906573d6000803e3d6000fd5b505050506040513d602081101561191c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561194f57600080fd5b61198d89898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b151561199857600080fd5b6001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a9857600080fd5b600060149054906101000a900460ff16151515611ab457600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b505050506040513d6020811015611baf57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d6020811015611c8457600080fd5b81019080805190602001909291905050501515611ca057600080fd5b82338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611d3f57600080fd5b505af1158015611d53573d6000803e3d6000fd5b505050506040513d6020811015611d6957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d6020811015611e1a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e4d57600080fd5b611e588585336124c4565b1515611e6357600080fd5b60019250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050506040513d6020811015611f7557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561202057600080fd5b505af1158015612034573d6000803e3d6000fd5b505050506040513d602081101561204a57600080fd5b8101908080519060200190929190505050151561206657600080fd5b600060149054906101000a900460ff1615151561208257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120be57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120f957600080fd5b6001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f33a3d999262ff437e53326be724087ffde4a0e2206145e777d73c074f9e7814560405160405180910390a360019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561224c57600080fd5b612255816126f2565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122b357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60008060149054906101000a900460ff161515156122e957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561232557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561236157600080fd5b600082511415151561237257600080fd5b60408051908101604052806001151581526020018381525060026000876000191660001916815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061241e9291906127ec565b509050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1686600019167fcecf6162187d0603b64a578ae5eb2b5c170738d3a097a35da53d46d8e3b70c0933604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a460019050949350505050565b60008060149054906101000a900460ff161515156124e157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561251d57600080fd5b60026000856000191660001916815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151561259157600080fd5b6040805190810160405280600015158152602001602060405190810160405280600081525081525060026000866000191660001916815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061264d9291906127ec565b509050508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1685600019167f3e2572399ac8fa0034bb0d33cefda0aa8f1b457f74d8275a2940d7a74fd99eb833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561272e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061282d57805160ff191683800117855561285b565b8280016001018555821561285b579182015b8281111561285a57825182559160200191906001019061283f565b5b509050612868919061286c565b5090565b61288e91905b8082111561288a576000816000905550600101612872565b5090565b905600a165627a7a7230582003f25e0e17d3e8f13a0c2bb6149cb14ce9c27017e18a49acb193b8fabe886a630029",
  "deployedBytecode": "0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e1691191461010b578063220e5b4b1461018c578063365a86fc146102255780633e1fd0da1461027c5780633ec50c6c146102e55780633f4ba83a146103ba5780635c975abb146103d1578063710ed77a14610400578063715018a6146104895780637473f4e0146104a057806383197ef0146105415780638456cb59146105585780638d53b2081461056f5780638da5cb5b146105d8578063e58432421461062f578063e71bdf41146106aa578063f2fde38b14610705578063f5074f4114610748575b34801561010857600080fd5b50005b34801561011757600080fd5b506101726004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200191909192939192939050505061078b565b604051808215151515815260200191505060405180910390f35b34801561019857600080fd5b5061020b6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610b32565b604051808215151515815260200191505060405180910390f35b34801561023157600080fd5b5061023a61115f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028857600080fd5b506102cb6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611185565b604051808215151515815260200191505060405180910390f35b3480156102f157600080fd5b506103346004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111f8565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037e578082015181840152602081019050610363565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b3480156103c657600080fd5b506103cf6112ce565b005b3480156103dd57600080fd5b506103e661138c565b604051808215151515815260200191505060405180910390f35b34801561040c57600080fd5b5061046f6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061139f565b604051808215151515815260200191505060405180910390f35b34801561049557600080fd5b5061049e611608565b005b3480156104ac57600080fd5b506105276004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200191909192939192939050505061170a565b604051808215151515815260200191505060405180910390f35b34801561054d57600080fd5b506105566119a8565b005b34801561056457600080fd5b5061056d611a3d565b005b34801561057b57600080fd5b506105be6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611afd565b604051808215151515815260200191505060405180910390f35b3480156105e457600080fd5b506105ed611e6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063b57600080fd5b50610690600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e94565b604051808215151515815260200191505060405180910390f35b3480156106b657600080fd5b506106eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ec3565b604051808215151515815260200191505060405180910390f35b34801561071157600080fd5b50610746600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f1565b005b34801561075457600080fd5b50610789600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612258565b005b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561081357600080fd5b505af1158015610827573d6000803e3d6000fd5b505050506040513d602081101561083d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156108e857600080fd5b505af11580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b8101908080519060200190929190505050151561092e57600080fd5b84338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b505050506040513d60208110156109f757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610a7e57600080fd5b505af1158015610a92573d6000803e3d6000fd5b505050506040513d6020811015610aa857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610adb57600080fd5b610b1987873388888080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b1515610b2457600080fd5b600192505050949350505050565b6000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505050506040513d6020811015610bea57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b505050506040513d6020811015610cbf57600080fd5b81019080805190602001909291905050501515610cdb57600080fd5b8a338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d7a57600080fd5b505af1158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b505050506040513d6020811015610e5557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515610e8857600080fd5b60006001028d6000191614151515610e9f57600080fd5b600095505b88889050861015611102578888878181101515610ebd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515610f1857600080fd5b8493508373ffffffffffffffffffffffffffffffffffffffff16639cf4898c8e8e8e8e6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505095505050505050602060405180830381600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d602081101561101257600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff168e600019167f5e2cd7ffbf87e3d8cef206b6758340ae4d51bea6fc30781e411157467c0428a88e8e88336040518080602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825286868281815260200192508082843782019150509550505050505060405180910390a48215156110f557600080fd5b8580600101965050610ea4565b6111408d8d338e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b151561114b57600080fd5b600196505050505050509695505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060026000846000191660001916815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16905092915050565b6002602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b5050505050905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561132957600080fd5b600060149054906101000a900460ff16151561134457600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600060149054906101000a900460ff1681565b600081600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561143757600080fd5b84838073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b505050506040513d602081101561150057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506040513d60208110156115b157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115e457600080fd5b6115ef8787876124c4565b15156115fa57600080fd5b600193505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561166357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600083600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156117a257600080fd5b86858073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561184157600080fd5b505af1158015611855573d6000803e3d6000fd5b505050506040513d602081101561186b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156118f257600080fd5b505af1158015611906573d6000803e3d6000fd5b505050506040513d602081101561191c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561194f57600080fd5b61198d89898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122cc565b151561199857600080fd5b6001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a9857600080fd5b600060149054906101000a900460ff16151515611ab457600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b505050506040513d6020811015611baf57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d6020811015611c8457600080fd5b81019080805190602001909291905050501515611ca057600080fd5b82338073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0d561e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611d3f57600080fd5b505af1158015611d53573d6000803e3d6000fd5b505050506040513d6020811015611d6957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166336880b82846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d6020811015611e1a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e4d57600080fd5b611e588585336124c4565b1515611e6357600080fd5b60019250505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663142ebf3c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050506040513d6020811015611f7557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16634209fff1336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561202057600080fd5b505af1158015612034573d6000803e3d6000fd5b505050506040513d602081101561204a57600080fd5b8101908080519060200190929190505050151561206657600080fd5b600060149054906101000a900460ff1615151561208257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120be57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120f957600080fd5b6001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f33a3d999262ff437e53326be724087ffde4a0e2206145e777d73c074f9e7814560405160405180910390a360019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561224c57600080fd5b612255816126f2565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122b357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60008060149054906101000a900460ff161515156122e957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561232557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561236157600080fd5b600082511415151561237257600080fd5b60408051908101604052806001151581526020018381525060026000876000191660001916815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061241e9291906127ec565b509050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1686600019167fcecf6162187d0603b64a578ae5eb2b5c170738d3a097a35da53d46d8e3b70c0933604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a460019050949350505050565b60008060149054906101000a900460ff161515156124e157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561251d57600080fd5b60026000856000191660001916815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16151561259157600080fd5b6040805190810160405280600015158152602001602060405190810160405280600081525081525060026000866000191660001916815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061264d9291906127ec565b509050508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1685600019167f3e2572399ac8fa0034bb0d33cefda0aa8f1b457f74d8275a2940d7a74fd99eb833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561272e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061282d57805160ff191683800117855561285b565b8280016001018555821561285b579182015b8281111561285a57825182559160200191906001019061283f565b5b509050612868919061286c565b5090565b61288e91905b8082111561288a576000816000905550600101612872565b5090565b905600a165627a7a7230582003f25e0e17d3e8f13a0c2bb6149cb14ce9c27017e18a49acb193b8fabe886a630029",
  "sourceMap": "349:7945:2:-;;;268:5:13;247:26;;;;;;;;;;;;;;;;;;;;1778:60:2;8:9:-1;5:2;;;30:1;27;20:12;5:2;1778:60:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;575:10:15;567:5;;:18;;;;;;;;;;;;;;;;;;1827:4:2;1821:3;;:10;;;;;;;;;;;;;;;;;;1778:60;349:7945;;;;;;",
  "deployedSourceMap": "349:7945:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;349:7945:2;;3025:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3025:309:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4297:860;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4297:860:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1103:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1103:18:2;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2102:175:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1175:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1175:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:92:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;838:92:13;;;;;;247:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;247:26:13;;;;;;;;;;;;;;;;;;;;;;;;;;;6091:302:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6091:302:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:111:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:15;;;;;;3672:347:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3672:347:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;366:66:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;366:66:12;;;;;;666:90:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;666:90:13;;;;;;5448:286:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5448:286:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;238:20:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:15;;;;;;;;;;;;;;;;;;;;;;;;;;;1290:61:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1290:61:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2403:344;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2403:344:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1100:103:15;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1100:103:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;436:96:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;436:96:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;3025:309:2;3204:4;1416:3;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:19:2;;;;;;;;;;;;;;;;:26;;;1443:10;1416:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:38:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:38:2;;;;;;;;;;;;;;;;1408:47;;;;;;;;3148:8;3158:10;1606:5;1557:54;;:3;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:21:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:21:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:21:2;;;;;;;;;;;;;;;;:35;;;1593:8;1557:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:45:2;;;;;;;;;;;;;;;;:54;;;1549:63;;;;;;;;3245:51;3258:8;3268:6;3276:10;3288:7;;3245:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:51::i;:::-;3224:82;;;;;;;;3323:4;3316:11;;1465:1;;3025:309;;;;;;:::o;4297:860::-;4531:4;4652:6;4704:17;4795:28;4868:9;1416:3;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:19:2;;;;;;;;;;;;;;;;:26;;;1443:10;1416:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:38:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:38:2;;;;;;;;;;;;;;;;1408:47;;;;;;;;4475:8;4485:10;1606:5;1557:54;;:3;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:21:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:21:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:21:2;;;;;;;;;;;;;;;;:35;;;1593:8;1557:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:45:2;;;;;;;;;;;;;;;;:54;;;1549:63;;;;;;;;4571:1;4559:13;;:8;:13;;;;;4551:22;;;;;;;;4661:1;4652:10;;4647:412;4668:8;;:15;;4664:1;:19;4647:412;;;4724:8;;4733:1;4724:11;;;;;;;;;;;;;;;;;4704:31;;4778:1;4757:23;;:9;:23;;;;4749:32;;;;;;;;4844:9;4795:59;;4880:10;:22;;;4903:8;4913:6;4921:7;;4880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4880:49:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4880:49:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4880:49:2;;;;;;;;;;;;;;;;4868:61;;4993:9;4948:73;;4985:6;4948:73;;4966:8;4948:73;;;;4976:7;;5004:4;5010:10;4948:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5043:4;5035:13;;;;;;;;4685:3;;;;;;;4647:412;;;5077:51;5090:8;5100:6;5108:10;5120:7;;5077:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:51::i;:::-;5069:60;;;;;;;;5146:4;5139:11;;1465:1;;4297:860;;;;;;;;;;;;:::o;1103:18::-;;;;;;;;;;;;;:::o;2102:175::-;2204:4;2231:11;:21;2243:8;2231:21;;;;;;;;;;;;;;;;;:29;2253:6;2231:29;;;;;;;;;;;;;;;:39;;;;;;;;;;;;2224:46;;2102:175;;;;:::o;1175:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;838:92:13:-;719:5:15;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;568:6:13;;;;;;;;;;;560:15;;;;;;;;900:5;891:6;;:14;;;;;;;;;;;;;;;;;;916:9;;;;;;;;;;838:92::o;247:26::-;;;;;;;;;;;;;:::o;6091:302:2:-;6298:4;6214:5;1703:9;:16;1713:5;1703:16;;;;;;;;;;;;;;;:28;1720:10;1703:28;;;;;;;;;;;;;;;;;;;;;;;;;1695:37;;;;;;;;6247:8;6257:5;1606;1557:54;;:3;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:21:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:21:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:21:2;;;;;;;;;;;;;;;;:35;;;1593:8;1557:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:45:2;;;;;;;;;;;;;;;;:54;;;1549:63;;;;;;;;6326:38;6340:8;6350:6;6358:5;6326:13;:38::i;:::-;6318:47;;;;;;;;6382:4;6375:11;;1742:1;;6091:302;;;;;;:::o;827:111:15:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;903:5;;;;;;;;;;;884:25;;;;;;;;;;;;931:1;915:5;;:18;;;;;;;;;;;;;;;;;;827:111::o;3672:347:2:-;3894:4;3810:5;1703:9;:16;1713:5;1703:16;;;;;;;;;;;;;;;:28;1720:10;1703:28;;;;;;;;;;;;;;;;;;;;;;;;;1695:37;;;;;;;;3843:8;3853:5;1606;1557:54;;:3;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:21:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:21:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:21:2;;;;;;;;;;;;;;;;:35;;;1593:8;1557:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:45:2;;;;;;;;;;;;;;;;:54;;;1549:63;;;;;;;;3935:46;3948:8;3958:6;3966:5;3973:7;;3935:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:46::i;:::-;3914:77;;;;;;;;4008:4;4001:11;;1742:1;;3672:347;;;;;;;;:::o;366:66:12:-;719:5:15;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;421:5:12;;;;;;;;;;;408:19;;;666:90:13;719:5:15;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;416:6:13;;;;;;;;;;;415:7;407:16;;;;;;;;729:4;720:6;;:13;;;;;;;;;;;;;;;;;;744:7;;;;;;;;;;666:90::o;5448:286:2:-;5612:4;1416:3;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:19:2;;;;;;;;;;;;;;;;:26;;;1443:10;1416:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:38:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:38:2;;;;;;;;;;;;;;;;1408:47;;;;;;;;5556:8;5566:10;1606:5;1557:54;;:3;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:21:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:21:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:21:2;;;;;;;;;;;;;;;;:35;;;1593:8;1557:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1557:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1557:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1557:45:2;;;;;;;;;;;;;;;;:54;;;1549:63;;;;;;;;5653:43;5667:8;5677:6;5685:10;5653:13;:43::i;:::-;5632:74;;;;;;;;5723:4;5716:11;;1465:1;;5448:286;;;;:::o;238:20:15:-;;;;;;;;;;;;;:::o;1290:61:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2403:344::-;2515:4;1416:3;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:19:2;;;;;;;;;;;;;;;;:26;;;1443:10;1416:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:38:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1416:38:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1416:38:2;;;;;;;;;;;;;;;;1408:47;;;;;;;;416:6:13;;;;;;;;;;;415:7;407:16;;;;;;;;2563:1:2;2543:22;;:8;:22;;;;2535:31;;;;;;;;2596:10;2584:22;;:8;:22;;;;2576:31;;;;;;;;2651:4;2617:9;:21;2627:10;2617:21;;;;;;;;;;;;;;;:31;2639:8;2617:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2710:8;2670:49;;2698:10;2670:49;;;;;;;;;;;;2736:4;2729:11;;2403:344;;;:::o;1100:103:15:-;719:5;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;436:96:12:-;719:5:15;;;;;;;;;;;705:19;;:10;:19;;;697:28;;;;;;;;516:10:12;503:24;;;6689:741:2;6832:4;416:6:13;;;;;;;;;;;415:7;407:16;;;;;;;;6903:1:2;6886:19;;:5;:19;;;;6878:28;;;;;;;;6942:1;6924:20;;:6;:20;;;;6916:29;;;;;;;;6988:1;6969:7;6963:21;:26;;6955:35;;;;;;;;7248:85;;;;;;;;;7284:4;7248:85;;;;;;7311:7;7248:85;;;7216:11;:21;7228:8;7216:21;;;;;;;;;;;;;;;;;:29;7238:6;7216:29;;;;;;;;;;;;;;;:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7383:6;7348:54;;7376:5;7348:54;;7366:8;7348:54;;;;7391:10;7348:54;;;;;;;;;;;;;;;;;;;;;;7419:4;7412:11;;6689:741;;;;;;:::o;7790:502::-;7918:4;416:6:13;;;;;;;;;;;415:7;407:16;;;;;;;;7963:1:2;7946:19;;:5;:19;;;;7938:28;;;;;;;;8032:11;:21;8044:8;8032:21;;;;;;;;;;;;;;;;;:29;8054:6;8032:29;;;;;;;;;;;;;;;:39;;;;;;;;;;;;8024:48;;;;;;;;8114:81;;;;;;;;;8150:5;8114:81;;;;;;;;;;;;;;;;;;;;;;8082:11;:21;8094:8;8082:21;;;;;;;;;;;;;;;;;:29;8104:6;8082:29;;;;;;;;;;;;;;;:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;8245:6;8210:54;;8238:5;8210:54;;8228:8;8210:54;;;;8253:10;8210:54;;;;;;;;;;;;;;;;;;;;;;8281:4;8274:11;;7790:502;;;;;:::o;1338:171:15:-;1429:1;1408:23;;:9;:23;;;;1400:32;;;;;;;;1471:9;1443:38;;1464:5;;;;;;;;;;;1443:38;;;;;;;;;;;;1495:9;1487:5;;:17;;;;;;;;;;;;;;;;;;1338:171;:::o;349:7945:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity 0.4.24;\n\nimport \"openzeppelin-solidity/contracts/lifecycle/Destructible.sol\";\nimport \"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\n\nimport \"./StowHub.sol\";\nimport \"./StowRecords.sol\";\nimport \"./StowUsers.sol\";\nimport \"./interfaces/PermissionPolicyI.sol\";\n\n\ncontract StowPermissions is Ownable, Pausable, Destructible {\n    struct Permission {\n        bool canAccess;\n        // data path of the data, encrypted to the viewer\n        string dataUri;\n    }\n\n    event StowAccessGranted(bytes32 indexed dataHash, address indexed owner,\n        address indexed viewer, address sender\n    );\n    event StowAccessRevoked(bytes32 indexed dataHash, address indexed owner,\n        address indexed viewer, address sender\n    );\n    event StowPermissionDelegateAdded(address indexed user, address indexed delegate);\n\n    event StowPolicyChecked(\n        bytes32 indexed dataHash,\n        string dataUri,\n        address indexed viewer,\n        address indexed policy,\n        bool isOk,\n        address sender\n    );\n\n    StowHub public hub;\n    // dataHash => viewer => permission mapping\n    mapping(bytes32 => mapping(address => Permission)) public permissions;\n    // user => delegate => bool mapping\n    mapping(address => mapping(address => bool)) public delegates;\n\n    /* Modifiers */\n    modifier onlyUser() {\n        require(hub.usersContract().isUser(msg.sender));\n        _;\n    }\n\n    modifier onlyRecordOwnerOf(bytes32 dataHash, address owner) {\n        require(hub.recordsContract().recordOwnerOf(dataHash) == owner);\n        _;\n    }\n\n    modifier onlyWhenSenderIsDelegate(address owner) {\n        require(delegates[owner][msg.sender]);\n        _;\n    }\n\n    /* Constructor */\n    constructor(StowHub _hub) public {\n        hub = _hub;\n    }\n\n    /* Fallback function */\n    function () public { }\n\n    /* External functions */\n\n    /// Check if a viewer has access to a record\n    /// @param dataHash the hash of the unencrypted data\n    /// @param viewer the address being allowed to view the data\n\n    function checkAccess(bytes32 dataHash, address viewer)\n        view\n        external\n        returns (bool)\n    {\n        return permissions[dataHash][viewer].canAccess;\n    }\n\n    /// Add a delegate for a user's permissions\n    /// @param delegate the address of the delegate being added by user\n    function addDelegate(address delegate)\n        onlyUser\n        whenNotPaused\n        external\n        returns (bool)\n    {\n        require(delegate != address(0));\n        require(delegate != msg.sender);\n        delegates[msg.sender][delegate] = true;\n        emit StowPermissionDelegateAdded(msg.sender, delegate);\n        return true;\n    }\n\n    /// Give a viewer access to a stow record\n    /// Called by owner of the record.\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user being granted permission to view the data\n    /// @param dataUri the path of the re-encrypted data\n    function grantAccess(\n        bytes32 dataHash, address viewer, string dataUri)\n        onlyUser\n        onlyRecordOwnerOf(dataHash, msg.sender)\n        external\n        returns (bool)\n    {\n        require(\n            _grantAccess(dataHash, viewer, msg.sender, dataUri)\n        );\n        return true;\n    }\n\n    /// Give a viewer access to a stow record\n    /// Called by delegate to the owner of the record.\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user being permissioned to view the data\n    /// @param owner the owner of the stow record\n    /// @param dataUri the path of the re-encrypted data\n    function grantAccessbyDelegate(\n        bytes32 dataHash, address viewer, address owner, string dataUri)\n        onlyWhenSenderIsDelegate(owner)\n        onlyRecordOwnerOf(dataHash, owner)\n        external\n        returns (bool)\n    {\n        require(\n            _grantAccess(dataHash, viewer, owner, dataUri)\n        );\n        return true;\n    }\n\n    /// Give a viewer access to a stow record\n    /// Called by owner of the record.\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user being granted permission to view the data\n    /// @param dataUri the path of the re-encrypted data\n    function grantPolicyBasedAccess(\n        bytes32 dataHash,\n        address viewer,\n        string dataUri,\n        address[] policies)\n        onlyUser\n        onlyRecordOwnerOf(dataHash, msg.sender)\n        external\n        returns (bool)\n    {\n        require(dataHash != 0);\n\n        // check policies and fail on first one that is not ok\n        for (uint i = 0; i < policies.length; i++) {\n            address curPolicy = policies[i];\n            require(curPolicy != address(0));\n            PermissionPolicyI currPolicy = PermissionPolicyI(curPolicy);\n            bool isOk = currPolicy.checkPolicy(dataHash, viewer, dataUri);\n            emit StowPolicyChecked(dataHash, dataUri, viewer, curPolicy, isOk, msg.sender);\n            require(isOk);\n        }\n\n        require(_grantAccess(dataHash, viewer, msg.sender, dataUri));\n        return true;\n    }\n\n    /// Revoke a viewer access to a stow record\n    /// Note that this does not necessarily remove the data from storage\n    /// Called by owner of the record.\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user that has permission to view the data\n    function revokeAccess(\n        bytes32 dataHash, address viewer)\n        onlyUser\n        onlyRecordOwnerOf(dataHash, msg.sender)\n        external\n        returns (bool)\n    {\n        require(\n            _revokeAccess(dataHash, viewer, msg.sender)\n        );\n        return true;\n    }\n\n    /// Revoke a viewer access to a stow record\n    /// Note that this does not necessarily remove the data from storage\n    /// Called by delegate to the owner of the record.\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user that has permission to view the data\n    /// @param owner the owner of the stow record\n    function revokeAccessbyDelegate(\n        bytes32 dataHash, address viewer, address owner)\n        onlyWhenSenderIsDelegate(owner)\n        onlyRecordOwnerOf(dataHash, owner)\n        external\n        returns (bool)\n    {\n        require(_revokeAccess(dataHash, viewer, owner));\n        return true;\n    }\n\n    /// Internal function to give a viewer access to a stow record\n    /// Called by external functions\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user being permissioned to view the data\n    /// @param dataUri the data path of the re-encrypted data\n    function _grantAccess(bytes32 dataHash, address viewer, address owner, string dataUri)\n        whenNotPaused\n        internal\n        returns (bool)\n    {\n        // validate input\n        require(owner != address(0));\n        require(viewer != address(0));\n        require(bytes(dataUri).length != 0);\n\n        // TODO, Uncomment this to prevent grant access twice, It is commented for testing purposes\n        // access must not have already been granted\n        // require(!permissions[dataHash][viewer].canAccess);\n        permissions[dataHash][viewer] = Permission({\n            canAccess: true,\n            dataUri: dataUri\n            });\n        emit StowAccessGranted(dataHash, owner, viewer, msg.sender);\n        return true;\n    }\n\n    /// Internal function to revoke a viewer access to a stow record\n    /// Called by external functions\n    /// Note that this does not necessarily remove the data from storage\n    /// @param dataHash the data hash of the stow record\n    /// @param viewer the user that has permission to view the data\n    /// @param owner the owner of the stow record\n    function _revokeAccess(bytes32 dataHash, address viewer, address owner)\n        whenNotPaused\n        internal\n        returns (bool)\n    {\n        require(owner != address(0));\n        // access must have already been grated\n        require(permissions[dataHash][viewer].canAccess);\n        permissions[dataHash][viewer] = Permission({\n            canAccess: false,\n            dataUri: \"\"\n            });\n        emit StowAccessRevoked(dataHash, owner, viewer, msg.sender);\n        return true;\n    }\n}\n",
  "sourcePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowPermissions.sol",
  "ast": {
    "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowPermissions.sol",
    "exportedSymbols": {
      "StowPermissions": [
        711
      ]
    },
    "id": 712,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 185,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Destructible.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Destructible.sol",
        "id": 186,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1945,
        "src": "25:68:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 187,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 2005,
        "src": "94:64:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 188,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 2185,
        "src": "159:63:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowHub.sol",
        "file": "./StowHub.sol",
        "id": 189,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 184,
        "src": "224:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowRecords.sol",
        "file": "./StowRecords.sol",
        "id": 190,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1461,
        "src": "248:27:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowUsers.sol",
        "file": "./StowUsers.sol",
        "id": 191,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1648,
        "src": "276:25:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/interfaces/PermissionPolicyI.sol",
        "file": "./interfaces/PermissionPolicyI.sol",
        "id": 192,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1692,
        "src": "302:44:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 193,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2184,
              "src": "377:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$2184",
                "typeString": "contract Ownable"
              }
            },
            "id": 194,
            "nodeType": "InheritanceSpecifier",
            "src": "377:7:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 195,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2004,
              "src": "386:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$2004",
                "typeString": "contract Pausable"
              }
            },
            "id": 196,
            "nodeType": "InheritanceSpecifier",
            "src": "386:8:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 197,
              "name": "Destructible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1944,
              "src": "396:12:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Destructible_$1944",
                "typeString": "contract Destructible"
              }
            },
            "id": 198,
            "nodeType": "InheritanceSpecifier",
            "src": "396:12:2"
          }
        ],
        "contractDependencies": [
          1944,
          2004,
          2184
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 711,
        "linearizedBaseContracts": [
          711,
          1944,
          2004,
          2184
        ],
        "name": "StowPermissions",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StowPermissions.Permission",
            "id": 203,
            "members": [
              {
                "constant": false,
                "id": 200,
                "name": "canAccess",
                "nodeType": "VariableDeclaration",
                "scope": 203,
                "src": "443:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 199,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "443:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 202,
                "name": "dataUri",
                "nodeType": "VariableDeclaration",
                "scope": 203,
                "src": "525:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 201,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "525:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Permission",
            "nodeType": "StructDefinition",
            "scope": 711,
            "src": "415:131:2",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 213,
            "name": "StowAccessGranted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 205,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "576:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 204,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 207,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "602:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 206,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "602:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 209,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "633:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 208,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "633:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 211,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "657:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 210,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "657:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "575:102:2"
            },
            "src": "552:126:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 223,
            "name": "StowAccessRevoked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 215,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "707:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 214,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "707:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 217,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "733:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 216,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "733:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 219,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "764:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 218,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "764:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 221,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "788:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "788:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "706:102:2"
            },
            "src": "683:126:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 229,
            "name": "StowPermissionDelegateAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 225,
                  "indexed": true,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 229,
                  "src": "848:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 224,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "848:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 227,
                  "indexed": true,
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 229,
                  "src": "870:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "870:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "847:48:2"
            },
            "src": "814:82:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 243,
            "name": "StowPolicyChecked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 231,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "935:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 230,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "935:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 233,
                  "indexed": false,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "969:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 232,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 235,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "993:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 234,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "993:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 237,
                  "indexed": true,
                  "name": "policy",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1025:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1025:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 239,
                  "indexed": false,
                  "name": "isOk",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1057:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 238,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1057:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1076:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "925:171:2"
            },
            "src": "902:195:2"
          },
          {
            "constant": false,
            "id": 245,
            "name": "hub",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1103:18:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_StowHub_$183",
              "typeString": "contract StowHub"
            },
            "typeName": {
              "contractScope": null,
              "id": 244,
              "name": "StowHub",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 183,
              "src": "1103:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_StowHub_$183",
                "typeString": "contract StowHub"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 251,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1175:69:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
              "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission))"
            },
            "typeName": {
              "id": 250,
              "keyType": {
                "id": 246,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1183:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1175:50:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission))"
              },
              "valueType": {
                "id": 249,
                "keyType": {
                  "id": 247,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1202:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1194:30:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                  "typeString": "mapping(address => struct StowPermissions.Permission)"
                },
                "valueType": {
                  "contractScope": null,
                  "id": 248,
                  "name": "Permission",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 203,
                  "src": "1213:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Permission_$203_storage_ptr",
                    "typeString": "struct StowPermissions.Permission"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 257,
            "name": "delegates",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1290:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 256,
              "keyType": {
                "id": 252,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1298:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1290:44:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 255,
                "keyType": {
                  "id": 253,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1317:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1309:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 254,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1328:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 270,
              "nodeType": "Block",
              "src": "1398:75:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 264,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "1443:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1443:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 260,
                                "name": "hub",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 245,
                                "src": "1416:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_StowHub_$183",
                                  "typeString": "contract StowHub"
                                }
                              },
                              "id": 261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "usersContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 71,
                              "src": "1416:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_StowUsers_$1647_$",
                                "typeString": "function () view external returns (contract StowUsers)"
                              }
                            },
                            "id": 262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1416:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_StowUsers_$1647",
                              "typeString": "contract StowUsers"
                            }
                          },
                          "id": 263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isUser",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1624,
                          "src": "1416:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1416:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1408:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1408:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "1408:47:2"
                },
                {
                  "id": 269,
                  "nodeType": "PlaceholderStatement",
                  "src": "1465:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 271,
            "name": "onlyUser",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1395:2:2"
            },
            "src": "1378:95:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 289,
              "nodeType": "Block",
              "src": "1539:91:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 282,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "1593:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 278,
                                  "name": "hub",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 245,
                                  "src": "1557:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StowHub_$183",
                                    "typeString": "contract StowHub"
                                  }
                                },
                                "id": 279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "recordsContract",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 73,
                                "src": "1557:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_StowRecords_$1460_$",
                                  "typeString": "function () view external returns (contract StowRecords)"
                                }
                              },
                              "id": 280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1557:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StowRecords_$1460",
                                "typeString": "contract StowRecords"
                              }
                            },
                            "id": 281,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recordOwnerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1263,
                            "src": "1557:35:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view external returns (address)"
                            }
                          },
                          "id": 283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1557:45:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 284,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 275,
                          "src": "1606:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1557:54:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 277,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1549:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1549:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 287,
                  "nodeType": "ExpressionStatement",
                  "src": "1549:63:2"
                },
                {
                  "id": 288,
                  "nodeType": "PlaceholderStatement",
                  "src": "1622:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 290,
            "name": "onlyRecordOwnerOf",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 273,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "1506:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 272,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1506:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 275,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "1524:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1524:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1505:33:2"
            },
            "src": "1479:151:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 304,
              "nodeType": "Block",
              "src": "1685:65:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 295,
                            "name": "delegates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 257,
                            "src": "1703:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                              "typeString": "mapping(address => mapping(address => bool))"
                            }
                          },
                          "id": 297,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 296,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 292,
                            "src": "1713:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1703:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 300,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 298,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "1720:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1720:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1703:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 294,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1695:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1695:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 302,
                  "nodeType": "ExpressionStatement",
                  "src": "1695:37:2"
                },
                {
                  "id": 303,
                  "nodeType": "PlaceholderStatement",
                  "src": "1742:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 305,
            "name": "onlyWhenSenderIsDelegate",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 292,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 305,
                  "src": "1670:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1669:15:2"
            },
            "src": "1636:114:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 314,
              "nodeType": "Block",
              "src": "1811:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 310,
                      "name": "hub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 245,
                      "src": "1821:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StowHub_$183",
                        "typeString": "contract StowHub"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 311,
                      "name": "_hub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 307,
                      "src": "1827:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StowHub_$183",
                        "typeString": "contract StowHub"
                      }
                    },
                    "src": "1821:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StowHub_$183",
                      "typeString": "contract StowHub"
                    }
                  },
                  "id": 313,
                  "nodeType": "ExpressionStatement",
                  "src": "1821:10:2"
                }
              ]
            },
            "documentation": null,
            "id": 315,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 307,
                  "name": "_hub",
                  "nodeType": "VariableDeclaration",
                  "scope": 315,
                  "src": "1790:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StowHub_$183",
                    "typeString": "contract StowHub"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 306,
                    "name": "StowHub",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 183,
                    "src": "1790:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StowHub_$183",
                      "typeString": "contract StowHub"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1789:14:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 309,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1811:0:2"
            },
            "scope": 711,
            "src": "1778:60:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 318,
              "nodeType": "Block",
              "src": "1891:3:2",
              "statements": []
            },
            "documentation": null,
            "id": 319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1881:2:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1891:0:2"
            },
            "scope": 711,
            "src": "1872:22:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 335,
              "nodeType": "Block",
              "src": "2214:63:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 328,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "2231:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 330,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 329,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 321,
                          "src": "2243:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2231:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 331,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 323,
                        "src": "2253:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2231:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "id": 333,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "canAccess",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 200,
                    "src": "2231:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 327,
                  "id": 334,
                  "nodeType": "Return",
                  "src": "2224:46:2"
                }
              ]
            },
            "documentation": "Check if a viewer has access to a record\n @param dataHash the hash of the unencrypted data\n @param viewer the address being allowed to view the data",
            "id": 336,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 321,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2123:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 320,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2123:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 323,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2141:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2141:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2122:34:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2203:6:2"
            },
            "scope": 711,
            "src": "2102:175:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 379,
              "nodeType": "Block",
              "src": "2525:222:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 348,
                          "name": "delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 338,
                          "src": "2543:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2563:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 349,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2555:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2555:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2543:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 347,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "2535:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2535:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 354,
                  "nodeType": "ExpressionStatement",
                  "src": "2535:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 356,
                          "name": "delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 338,
                          "src": "2584:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 357,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "2596:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2596:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2584:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 355,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "2576:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2576:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 361,
                  "nodeType": "ExpressionStatement",
                  "src": "2576:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 362,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 257,
                          "src": "2617:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 366,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 363,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "2627:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2627:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2617:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 367,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 365,
                        "name": "delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 338,
                        "src": "2639:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2617:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2651:4:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2617:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 370,
                  "nodeType": "ExpressionStatement",
                  "src": "2617:38:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 372,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "2698:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2698:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 374,
                        "name": "delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 338,
                        "src": "2710:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 371,
                      "name": "StowPermissionDelegateAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 229,
                      "src": "2670:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2670:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 376,
                  "nodeType": "EmitStatement",
                  "src": "2665:54:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2736:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 346,
                  "id": 378,
                  "nodeType": "Return",
                  "src": "2729:11:2"
                }
              ]
            },
            "documentation": "Add a delegate for a user's permissions\n @param delegate the address of the delegate being added by user",
            "id": 380,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 341,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 340,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "2450:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2450:8:2"
              },
              {
                "arguments": null,
                "id": 343,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 342,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "2467:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2467:13:2"
              }
            ],
            "name": "addDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 338,
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 380,
                  "src": "2424:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 337,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2424:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2423:18:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 380,
                  "src": "2515:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 344,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2514:6:2"
            },
            "scope": 711,
            "src": "2403:344:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 410,
              "nodeType": "Block",
              "src": "3214:120:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 400,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 382,
                            "src": "3258:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 401,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 384,
                            "src": "3268:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 402,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "3276:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3276:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 404,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 386,
                            "src": "3288:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 399,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "3245:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3245:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "3224:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3224:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 407,
                  "nodeType": "ExpressionStatement",
                  "src": "3224:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3323:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 397,
                  "id": 409,
                  "nodeType": "Return",
                  "src": "3316:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being granted permission to view the data\n @param dataUri the path of the re-encrypted data",
            "id": 411,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 388,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "3113:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3113:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 391,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 382,
                    "src": "3148:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "3158:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3158:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 394,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 390,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "3130:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3130:39:2"
              }
            ],
            "name": "grantAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 382,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3055:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 381,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3055:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 384,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3073:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 383,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3073:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 386,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3089:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3089:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3045:59:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 396,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 395,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3203:6:2"
            },
            "scope": 711,
            "src": "3025:309:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 442,
              "nodeType": "Block",
              "src": "3904:115:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 433,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "3948:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 434,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 415,
                            "src": "3958:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 435,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 417,
                            "src": "3966:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 419,
                            "src": "3973:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 432,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "3935:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3935:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 431,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "3914:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3914:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 439,
                  "nodeType": "ExpressionStatement",
                  "src": "3914:77:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4008:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 430,
                  "id": 441,
                  "nodeType": "Return",
                  "src": "4001:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by delegate to the owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being permissioned to view the data\n @param owner the owner of the stow record\n @param dataUri the path of the re-encrypted data",
            "id": 443,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 422,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 417,
                    "src": "3810:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 423,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 421,
                  "name": "onlyWhenSenderIsDelegate",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 305,
                  "src": "3785:24:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3785:31:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 425,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 413,
                    "src": "3843:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 426,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 417,
                    "src": "3853:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 427,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 424,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "3825:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3825:34:2"
              }
            ],
            "name": "grantAccessbyDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 413,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3712:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 415,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3730:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3730:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 417,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3746:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 416,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3746:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 419,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3761:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 418,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3761:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3702:74:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3894:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3894:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3893:6:2"
            },
            "scope": 711,
            "src": "3672:347:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 538,
              "nodeType": "Block",
              "src": "4541:616:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 465,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 445,
                          "src": "4559:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4571:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4559:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "4551:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4551:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 469,
                  "nodeType": "ExpressionStatement",
                  "src": "4551:22:2"
                },
                {
                  "body": {
                    "id": 524,
                    "nodeType": "Block",
                    "src": "4690:369:2",
                    "statements": [
                      {
                        "assignments": [
                          482
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 482,
                            "name": "curPolicy",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4704:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 481,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4704:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 486,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 483,
                            "name": "policies",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 452,
                            "src": "4724:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 485,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 484,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 471,
                            "src": "4733:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4724:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4704:31:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 488,
                                "name": "curPolicy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 482,
                                "src": "4757:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 490,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4778:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 489,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4770:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4770:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4757:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 487,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2756,
                              2757
                            ],
                            "referencedDeclaration": 2756,
                            "src": "4749:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4749:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 494,
                        "nodeType": "ExpressionStatement",
                        "src": "4749:32:2"
                      },
                      {
                        "assignments": [
                          496
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 496,
                            "name": "currPolicy",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4795:28:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                              "typeString": "contract PermissionPolicyI"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 495,
                              "name": "PermissionPolicyI",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1691,
                              "src": "4795:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                                "typeString": "contract PermissionPolicyI"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 500,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 498,
                              "name": "curPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 482,
                              "src": "4844:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 497,
                            "name": "PermissionPolicyI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1691,
                            "src": "4826:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PermissionPolicyI_$1691_$",
                              "typeString": "type(contract PermissionPolicyI)"
                            }
                          },
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4826:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                            "typeString": "contract PermissionPolicyI"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4795:59:2"
                      },
                      {
                        "assignments": [
                          502
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 502,
                            "name": "isOk",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4868:9:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 501,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4868:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 509,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 505,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 445,
                              "src": "4903:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 506,
                              "name": "viewer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 447,
                              "src": "4913:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 507,
                              "name": "dataUri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 449,
                              "src": "4921:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 503,
                              "name": "currPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 496,
                              "src": "4880:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                                "typeString": "contract PermissionPolicyI"
                              }
                            },
                            "id": 504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkPolicy",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1690,
                            "src": "4880:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address,string memory) view external returns (bool)"
                            }
                          },
                          "id": 508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4880:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4868:61:2"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 511,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 445,
                              "src": "4966:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 512,
                              "name": "dataUri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 449,
                              "src": "4976:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 513,
                              "name": "viewer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 447,
                              "src": "4985:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 514,
                              "name": "curPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 482,
                              "src": "4993:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 515,
                              "name": "isOk",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "5004:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 516,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2753,
                                "src": "5010:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "5010:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 510,
                            "name": "StowPolicyChecked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 243,
                            "src": "4948:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_bool_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,string memory,address,address,bool,address)"
                            }
                          },
                          "id": 518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4948:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 519,
                        "nodeType": "EmitStatement",
                        "src": "4943:78:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 521,
                              "name": "isOk",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "5043:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 520,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2756,
                              2757
                            ],
                            "referencedDeclaration": 2756,
                            "src": "5035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5035:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 523,
                        "nodeType": "ExpressionStatement",
                        "src": "5035:13:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 474,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 471,
                      "src": "4664:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 475,
                        "name": "policies",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 452,
                        "src": "4668:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4668:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4664:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 525,
                  "initializationExpression": {
                    "assignments": [
                      471
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 471,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 539,
                        "src": "4652:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 470,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4652:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 473,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4661:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4652:10:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4685:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 471,
                        "src": "4685:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 480,
                    "nodeType": "ExpressionStatement",
                    "src": "4685:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "4647:412:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 528,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 445,
                            "src": "5090:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 529,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 447,
                            "src": "5100:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 530,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "5108:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5108:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 532,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 449,
                            "src": "5120:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 527,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "5077:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5077:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "5069:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5069:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 535,
                  "nodeType": "ExpressionStatement",
                  "src": "5069:60:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5146:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 463,
                  "id": 537,
                  "nodeType": "Return",
                  "src": "5139:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being granted permission to view the data\n @param dataUri the path of the re-encrypted data",
            "id": 539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 455,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 454,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "4440:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4440:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 457,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 445,
                    "src": "4475:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 458,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "4485:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4485:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 460,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 456,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "4457:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4457:39:2"
              }
            ],
            "name": "grantPolicyBasedAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 445,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4338:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 444,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4338:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 447,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4364:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4364:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 449,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4388:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 448,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4388:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 452,
                  "name": "policies",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4412:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 450,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4412:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 451,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4412:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4328:103:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 462,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4531:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 461,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4530:6:2"
            },
            "scope": 711,
            "src": "4297:860:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 566,
              "nodeType": "Block",
              "src": "5622:112:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 557,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 541,
                            "src": "5667:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 558,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 543,
                            "src": "5677:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 559,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "5685:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 560,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5685:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 556,
                          "name": "_revokeAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 710,
                          "src": "5653:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address) returns (bool)"
                          }
                        },
                        "id": 561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5653:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 555,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "5632:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5632:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 563,
                  "nodeType": "ExpressionStatement",
                  "src": "5632:74:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5723:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 554,
                  "id": 565,
                  "nodeType": "Return",
                  "src": "5716:11:2"
                }
              ]
            },
            "documentation": "Revoke a viewer access to a stow record\n Note that this does not necessarily remove the data from storage\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data",
            "id": 567,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 546,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 545,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "5521:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5521:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 548,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 541,
                    "src": "5556:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 549,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "5566:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5566:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 551,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 547,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "5538:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5538:39:2"
              }
            ],
            "name": "revokeAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 541,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5479:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 540,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5479:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 543,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5497:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 542,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5469:43:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 553,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5612:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5612:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5611:6:2"
            },
            "scope": 711,
            "src": "5448:286:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 595,
              "nodeType": "Block",
              "src": "6308:85:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 587,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 569,
                            "src": "6340:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 588,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 571,
                            "src": "6350:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 589,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "6358:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 586,
                          "name": "_revokeAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 710,
                          "src": "6326:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address) returns (bool)"
                          }
                        },
                        "id": 590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6326:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 585,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6318:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6318:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 592,
                  "nodeType": "ExpressionStatement",
                  "src": "6318:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6382:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 584,
                  "id": 594,
                  "nodeType": "Return",
                  "src": "6375:11:2"
                }
              ]
            },
            "documentation": "Revoke a viewer access to a stow record\n Note that this does not necessarily remove the data from storage\n Called by delegate to the owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data\n @param owner the owner of the stow record",
            "id": 596,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 576,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "6214:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 577,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 575,
                  "name": "onlyWhenSenderIsDelegate",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 305,
                  "src": "6189:24:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6189:31:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 579,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 569,
                    "src": "6247:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 580,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "6257:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 581,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 578,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "6229:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6229:34:2"
              }
            ],
            "name": "revokeAccessbyDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 569,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6132:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 568,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6132:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 571,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6150:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6150:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 573,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6166:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6166:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6122:58:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 583,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6298:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 582,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6298:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6297:6:2"
            },
            "scope": 711,
            "src": "6091:302:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 657,
              "nodeType": "Block",
              "src": "6842:588:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 612,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 602,
                          "src": "6886:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6903:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 613,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6895:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6895:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6886:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 611,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6878:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6878:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 618,
                  "nodeType": "ExpressionStatement",
                  "src": "6878:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 620,
                          "name": "viewer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 600,
                          "src": "6924:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6942:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6934:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6934:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6924:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 619,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6916:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6916:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 626,
                  "nodeType": "ExpressionStatement",
                  "src": "6916:29:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 633,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 629,
                                "name": "dataUri",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 604,
                                "src": "6969:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6963:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": "bytes"
                            },
                            "id": 630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6963:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6963:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6988:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6963:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 627,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6955:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6955:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 635,
                  "nodeType": "ExpressionStatement",
                  "src": "6955:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 636,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "7216:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 639,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 637,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 598,
                          "src": "7228:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7216:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 640,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 638,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 600,
                        "src": "7238:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7216:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7284:4:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 643,
                          "name": "dataUri",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 604,
                          "src": "7311:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 641,
                        "name": "Permission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "7248:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Permission_$203_storage_ptr_$",
                          "typeString": "type(struct StowPermissions.Permission storage pointer)"
                        }
                      },
                      "id": 644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "canAccess",
                        "dataUri"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "7248:85:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_memory",
                        "typeString": "struct StowPermissions.Permission memory"
                      }
                    },
                    "src": "7216:117:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Permission_$203_storage",
                      "typeString": "struct StowPermissions.Permission storage ref"
                    }
                  },
                  "id": 646,
                  "nodeType": "ExpressionStatement",
                  "src": "7216:117:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 648,
                        "name": "dataHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 598,
                        "src": "7366:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 649,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 602,
                        "src": "7376:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 650,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 600,
                        "src": "7383:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 651,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "7391:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7391:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 647,
                      "name": "StowAccessGranted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 213,
                      "src": "7348:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,address)"
                      }
                    },
                    "id": 653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7348:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 654,
                  "nodeType": "EmitStatement",
                  "src": "7343:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7419:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 610,
                  "id": 656,
                  "nodeType": "Return",
                  "src": "7412:11:2"
                }
              ]
            },
            "documentation": "Internal function to give a viewer access to a stow record\n Called by external functions\n @param dataHash the data hash of the stow record\n @param viewer the user being permissioned to view the data\n @param dataUri the data path of the re-encrypted data",
            "id": 658,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 607,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 606,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "6784:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6784:13:2"
              }
            ],
            "name": "_grantAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 598,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6711:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 600,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6729:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 599,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6729:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 602,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6745:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 601,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6745:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 604,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6760:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 603,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6760:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6710:65:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 609,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6832:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 608,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6832:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6831:6:2"
            },
            "scope": 711,
            "src": "6689:741:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 709,
              "nodeType": "Block",
              "src": "7928:364:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 672,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 664,
                          "src": "7946:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7963:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7955:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7955:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7946:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 671,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "7938:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7938:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 678,
                  "nodeType": "ExpressionStatement",
                  "src": "7938:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 680,
                              "name": "permissions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 251,
                              "src": "8032:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                                "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                              }
                            },
                            "id": 682,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 681,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 660,
                              "src": "8044:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8032:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                              "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                            }
                          },
                          "id": 684,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 683,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 662,
                            "src": "8054:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8032:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Permission_$203_storage",
                            "typeString": "struct StowPermissions.Permission storage ref"
                          }
                        },
                        "id": 685,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "canAccess",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 200,
                        "src": "8032:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 679,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "8024:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 687,
                  "nodeType": "ExpressionStatement",
                  "src": "8024:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 688,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "8082:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 691,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 689,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 660,
                          "src": "8094:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8082:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 692,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 690,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 662,
                        "src": "8104:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8082:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8150:5:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "",
                          "id": 695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8178:2:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 693,
                        "name": "Permission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "8114:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Permission_$203_storage_ptr_$",
                          "typeString": "type(struct StowPermissions.Permission storage pointer)"
                        }
                      },
                      "id": 696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "canAccess",
                        "dataUri"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "8114:81:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_memory",
                        "typeString": "struct StowPermissions.Permission memory"
                      }
                    },
                    "src": "8082:113:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Permission_$203_storage",
                      "typeString": "struct StowPermissions.Permission storage ref"
                    }
                  },
                  "id": 698,
                  "nodeType": "ExpressionStatement",
                  "src": "8082:113:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 700,
                        "name": "dataHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 660,
                        "src": "8228:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 664,
                        "src": "8238:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 702,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 662,
                        "src": "8245:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 703,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "8253:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8253:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 699,
                      "name": "StowAccessRevoked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 223,
                      "src": "8210:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,address)"
                      }
                    },
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8210:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 706,
                  "nodeType": "EmitStatement",
                  "src": "8205:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8281:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 670,
                  "id": 708,
                  "nodeType": "Return",
                  "src": "8274:11:2"
                }
              ]
            },
            "documentation": "Internal function to revoke a viewer access to a stow record\n Called by external functions\n Note that this does not necessarily remove the data from storage\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data\n @param owner the owner of the stow record",
            "id": 710,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 667,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 666,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "7870:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7870:13:2"
              }
            ],
            "name": "_revokeAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 660,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7813:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 659,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7813:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 662,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7831:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7831:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 664,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7847:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 663,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7847:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7812:49:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 670,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 669,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7918:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 668,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7918:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7917:6:2"
            },
            "scope": 711,
            "src": "7790:502:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 712,
        "src": "349:7945:2"
      }
    ],
    "src": "0:8295:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowPermissions.sol",
    "exportedSymbols": {
      "StowPermissions": [
        711
      ]
    },
    "id": 712,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 185,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Destructible.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Destructible.sol",
        "id": 186,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1945,
        "src": "25:68:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "file": "openzeppelin-solidity/contracts/lifecycle/Pausable.sol",
        "id": 187,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 2005,
        "src": "94:64:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 188,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 2185,
        "src": "159:63:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowHub.sol",
        "file": "./StowHub.sol",
        "id": 189,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 184,
        "src": "224:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowRecords.sol",
        "file": "./StowRecords.sol",
        "id": 190,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1461,
        "src": "248:27:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/StowUsers.sol",
        "file": "./StowUsers.sol",
        "id": 191,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1648,
        "src": "276:25:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/godfreyhobbs/repo/Linnia-Smart-Contracts/contracts/interfaces/PermissionPolicyI.sol",
        "file": "./interfaces/PermissionPolicyI.sol",
        "id": 192,
        "nodeType": "ImportDirective",
        "scope": 712,
        "sourceUnit": 1692,
        "src": "302:44:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 193,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2184,
              "src": "377:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$2184",
                "typeString": "contract Ownable"
              }
            },
            "id": 194,
            "nodeType": "InheritanceSpecifier",
            "src": "377:7:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 195,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2004,
              "src": "386:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$2004",
                "typeString": "contract Pausable"
              }
            },
            "id": 196,
            "nodeType": "InheritanceSpecifier",
            "src": "386:8:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 197,
              "name": "Destructible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1944,
              "src": "396:12:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Destructible_$1944",
                "typeString": "contract Destructible"
              }
            },
            "id": 198,
            "nodeType": "InheritanceSpecifier",
            "src": "396:12:2"
          }
        ],
        "contractDependencies": [
          1944,
          2004,
          2184
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 711,
        "linearizedBaseContracts": [
          711,
          1944,
          2004,
          2184
        ],
        "name": "StowPermissions",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StowPermissions.Permission",
            "id": 203,
            "members": [
              {
                "constant": false,
                "id": 200,
                "name": "canAccess",
                "nodeType": "VariableDeclaration",
                "scope": 203,
                "src": "443:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 199,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "443:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 202,
                "name": "dataUri",
                "nodeType": "VariableDeclaration",
                "scope": 203,
                "src": "525:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                },
                "typeName": {
                  "id": 201,
                  "name": "string",
                  "nodeType": "ElementaryTypeName",
                  "src": "525:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage_ptr",
                    "typeString": "string"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Permission",
            "nodeType": "StructDefinition",
            "scope": 711,
            "src": "415:131:2",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 213,
            "name": "StowAccessGranted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 205,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "576:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 204,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 207,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "602:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 206,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "602:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 209,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "633:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 208,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "633:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 211,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 213,
                  "src": "657:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 210,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "657:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "575:102:2"
            },
            "src": "552:126:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 223,
            "name": "StowAccessRevoked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 215,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "707:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 214,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "707:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 217,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "733:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 216,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "733:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 219,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "764:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 218,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "764:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 221,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 223,
                  "src": "788:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "788:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "706:102:2"
            },
            "src": "683:126:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 229,
            "name": "StowPermissionDelegateAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 225,
                  "indexed": true,
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 229,
                  "src": "848:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 224,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "848:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 227,
                  "indexed": true,
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 229,
                  "src": "870:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "870:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "847:48:2"
            },
            "src": "814:82:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 243,
            "name": "StowPolicyChecked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 231,
                  "indexed": true,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "935:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 230,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "935:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 233,
                  "indexed": false,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "969:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 232,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "969:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 235,
                  "indexed": true,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "993:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 234,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "993:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 237,
                  "indexed": true,
                  "name": "policy",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1025:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1025:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 239,
                  "indexed": false,
                  "name": "isOk",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1057:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 238,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1057:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "indexed": false,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 243,
                  "src": "1076:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "925:171:2"
            },
            "src": "902:195:2"
          },
          {
            "constant": false,
            "id": 245,
            "name": "hub",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1103:18:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_StowHub_$183",
              "typeString": "contract StowHub"
            },
            "typeName": {
              "contractScope": null,
              "id": 244,
              "name": "StowHub",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 183,
              "src": "1103:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_StowHub_$183",
                "typeString": "contract StowHub"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 251,
            "name": "permissions",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1175:69:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
              "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission))"
            },
            "typeName": {
              "id": 250,
              "keyType": {
                "id": 246,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1183:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1175:50:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission))"
              },
              "valueType": {
                "id": 249,
                "keyType": {
                  "id": 247,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1202:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1194:30:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                  "typeString": "mapping(address => struct StowPermissions.Permission)"
                },
                "valueType": {
                  "contractScope": null,
                  "id": 248,
                  "name": "Permission",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 203,
                  "src": "1213:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Permission_$203_storage_ptr",
                    "typeString": "struct StowPermissions.Permission"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 257,
            "name": "delegates",
            "nodeType": "VariableDeclaration",
            "scope": 711,
            "src": "1290:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 256,
              "keyType": {
                "id": 252,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1298:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1290:44:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 255,
                "keyType": {
                  "id": 253,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1317:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1309:24:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 254,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1328:4:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 270,
              "nodeType": "Block",
              "src": "1398:75:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 264,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "1443:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1443:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 260,
                                "name": "hub",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 245,
                                "src": "1416:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_StowHub_$183",
                                  "typeString": "contract StowHub"
                                }
                              },
                              "id": 261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "usersContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 71,
                              "src": "1416:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_StowUsers_$1647_$",
                                "typeString": "function () view external returns (contract StowUsers)"
                              }
                            },
                            "id": 262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1416:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_StowUsers_$1647",
                              "typeString": "contract StowUsers"
                            }
                          },
                          "id": 263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isUser",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1624,
                          "src": "1416:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1416:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 259,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1408:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1408:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "1408:47:2"
                },
                {
                  "id": 269,
                  "nodeType": "PlaceholderStatement",
                  "src": "1465:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 271,
            "name": "onlyUser",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1395:2:2"
            },
            "src": "1378:95:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 289,
              "nodeType": "Block",
              "src": "1539:91:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 282,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 273,
                              "src": "1593:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 278,
                                  "name": "hub",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 245,
                                  "src": "1557:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StowHub_$183",
                                    "typeString": "contract StowHub"
                                  }
                                },
                                "id": 279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "recordsContract",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 73,
                                "src": "1557:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_StowRecords_$1460_$",
                                  "typeString": "function () view external returns (contract StowRecords)"
                                }
                              },
                              "id": 280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1557:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StowRecords_$1460",
                                "typeString": "contract StowRecords"
                              }
                            },
                            "id": 281,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recordOwnerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1263,
                            "src": "1557:35:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view external returns (address)"
                            }
                          },
                          "id": 283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1557:45:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 284,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 275,
                          "src": "1606:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1557:54:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 277,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1549:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1549:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 287,
                  "nodeType": "ExpressionStatement",
                  "src": "1549:63:2"
                },
                {
                  "id": 288,
                  "nodeType": "PlaceholderStatement",
                  "src": "1622:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 290,
            "name": "onlyRecordOwnerOf",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 273,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "1506:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 272,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1506:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 275,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "1524:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1524:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1505:33:2"
            },
            "src": "1479:151:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 304,
              "nodeType": "Block",
              "src": "1685:65:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 295,
                            "name": "delegates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 257,
                            "src": "1703:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                              "typeString": "mapping(address => mapping(address => bool))"
                            }
                          },
                          "id": 297,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 296,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 292,
                            "src": "1713:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1703:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 300,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 298,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "1720:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1720:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1703:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 294,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "1695:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1695:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 302,
                  "nodeType": "ExpressionStatement",
                  "src": "1695:37:2"
                },
                {
                  "id": 303,
                  "nodeType": "PlaceholderStatement",
                  "src": "1742:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 305,
            "name": "onlyWhenSenderIsDelegate",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 292,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 305,
                  "src": "1670:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1670:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1669:15:2"
            },
            "src": "1636:114:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 314,
              "nodeType": "Block",
              "src": "1811:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 310,
                      "name": "hub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 245,
                      "src": "1821:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StowHub_$183",
                        "typeString": "contract StowHub"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 311,
                      "name": "_hub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 307,
                      "src": "1827:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_StowHub_$183",
                        "typeString": "contract StowHub"
                      }
                    },
                    "src": "1821:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StowHub_$183",
                      "typeString": "contract StowHub"
                    }
                  },
                  "id": 313,
                  "nodeType": "ExpressionStatement",
                  "src": "1821:10:2"
                }
              ]
            },
            "documentation": null,
            "id": 315,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 307,
                  "name": "_hub",
                  "nodeType": "VariableDeclaration",
                  "scope": 315,
                  "src": "1790:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StowHub_$183",
                    "typeString": "contract StowHub"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 306,
                    "name": "StowHub",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 183,
                    "src": "1790:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StowHub_$183",
                      "typeString": "contract StowHub"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1789:14:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 309,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1811:0:2"
            },
            "scope": 711,
            "src": "1778:60:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 318,
              "nodeType": "Block",
              "src": "1891:3:2",
              "statements": []
            },
            "documentation": null,
            "id": 319,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1881:2:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1891:0:2"
            },
            "scope": 711,
            "src": "1872:22:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 335,
              "nodeType": "Block",
              "src": "2214:63:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 328,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "2231:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 330,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 329,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 321,
                          "src": "2243:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2231:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 331,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 323,
                        "src": "2253:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2231:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "id": 333,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "canAccess",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 200,
                    "src": "2231:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 327,
                  "id": 334,
                  "nodeType": "Return",
                  "src": "2224:46:2"
                }
              ]
            },
            "documentation": "Check if a viewer has access to a record\n @param dataHash the hash of the unencrypted data\n @param viewer the address being allowed to view the data",
            "id": 336,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 321,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2123:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 320,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2123:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 323,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2141:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2141:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2122:34:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 326,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 336,
                  "src": "2204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2203:6:2"
            },
            "scope": 711,
            "src": "2102:175:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 379,
              "nodeType": "Block",
              "src": "2525:222:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 348,
                          "name": "delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 338,
                          "src": "2543:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2563:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 349,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2555:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2555:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2543:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 347,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "2535:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2535:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 354,
                  "nodeType": "ExpressionStatement",
                  "src": "2535:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 356,
                          "name": "delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 338,
                          "src": "2584:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 357,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "2596:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2596:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2584:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 355,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "2576:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2576:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 361,
                  "nodeType": "ExpressionStatement",
                  "src": "2576:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 362,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 257,
                          "src": "2617:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 366,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 363,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2753,
                            "src": "2627:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2627:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2617:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 367,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 365,
                        "name": "delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 338,
                        "src": "2639:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2617:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2651:4:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2617:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 370,
                  "nodeType": "ExpressionStatement",
                  "src": "2617:38:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 372,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "2698:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2698:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 374,
                        "name": "delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 338,
                        "src": "2710:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 371,
                      "name": "StowPermissionDelegateAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 229,
                      "src": "2670:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2670:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 376,
                  "nodeType": "EmitStatement",
                  "src": "2665:54:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2736:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 346,
                  "id": 378,
                  "nodeType": "Return",
                  "src": "2729:11:2"
                }
              ]
            },
            "documentation": "Add a delegate for a user's permissions\n @param delegate the address of the delegate being added by user",
            "id": 380,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 341,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 340,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "2450:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2450:8:2"
              },
              {
                "arguments": null,
                "id": 343,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 342,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "2467:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2467:13:2"
              }
            ],
            "name": "addDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 338,
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 380,
                  "src": "2424:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 337,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2424:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2423:18:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 380,
                  "src": "2515:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 344,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2514:6:2"
            },
            "scope": 711,
            "src": "2403:344:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 410,
              "nodeType": "Block",
              "src": "3214:120:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 400,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 382,
                            "src": "3258:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 401,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 384,
                            "src": "3268:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 402,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "3276:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3276:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 404,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 386,
                            "src": "3288:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 399,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "3245:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3245:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "3224:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3224:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 407,
                  "nodeType": "ExpressionStatement",
                  "src": "3224:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3323:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 397,
                  "id": 409,
                  "nodeType": "Return",
                  "src": "3316:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being granted permission to view the data\n @param dataUri the path of the re-encrypted data",
            "id": 411,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 389,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 388,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "3113:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3113:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 391,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 382,
                    "src": "3148:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 392,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "3158:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3158:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 394,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 390,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "3130:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3130:39:2"
              }
            ],
            "name": "grantAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 387,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 382,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3055:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 381,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3055:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 384,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3073:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 383,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3073:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 386,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3089:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3089:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3045:59:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 396,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 411,
                  "src": "3204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 395,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3203:6:2"
            },
            "scope": 711,
            "src": "3025:309:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 442,
              "nodeType": "Block",
              "src": "3904:115:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 433,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 413,
                            "src": "3948:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 434,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 415,
                            "src": "3958:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 435,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 417,
                            "src": "3966:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 419,
                            "src": "3973:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 432,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "3935:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3935:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 431,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "3914:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3914:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 439,
                  "nodeType": "ExpressionStatement",
                  "src": "3914:77:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4008:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 430,
                  "id": 441,
                  "nodeType": "Return",
                  "src": "4001:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by delegate to the owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being permissioned to view the data\n @param owner the owner of the stow record\n @param dataUri the path of the re-encrypted data",
            "id": 443,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 422,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 417,
                    "src": "3810:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 423,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 421,
                  "name": "onlyWhenSenderIsDelegate",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 305,
                  "src": "3785:24:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3785:31:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 425,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 413,
                    "src": "3843:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 426,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 417,
                    "src": "3853:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 427,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 424,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "3825:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3825:34:2"
              }
            ],
            "name": "grantAccessbyDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 413,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3712:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 412,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 415,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3730:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3730:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 417,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3746:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 416,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3746:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 419,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3761:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 418,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3761:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3702:74:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 443,
                  "src": "3894:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 428,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3894:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3893:6:2"
            },
            "scope": 711,
            "src": "3672:347:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 538,
              "nodeType": "Block",
              "src": "4541:616:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 465,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 445,
                          "src": "4559:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4571:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4559:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "4551:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4551:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 469,
                  "nodeType": "ExpressionStatement",
                  "src": "4551:22:2"
                },
                {
                  "body": {
                    "id": 524,
                    "nodeType": "Block",
                    "src": "4690:369:2",
                    "statements": [
                      {
                        "assignments": [
                          482
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 482,
                            "name": "curPolicy",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4704:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 481,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4704:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 486,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 483,
                            "name": "policies",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 452,
                            "src": "4724:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 485,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 484,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 471,
                            "src": "4733:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4724:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4704:31:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 488,
                                "name": "curPolicy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 482,
                                "src": "4757:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 490,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4778:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 489,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4770:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4770:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4757:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 487,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2756,
                              2757
                            ],
                            "referencedDeclaration": 2756,
                            "src": "4749:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4749:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 494,
                        "nodeType": "ExpressionStatement",
                        "src": "4749:32:2"
                      },
                      {
                        "assignments": [
                          496
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 496,
                            "name": "currPolicy",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4795:28:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                              "typeString": "contract PermissionPolicyI"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 495,
                              "name": "PermissionPolicyI",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1691,
                              "src": "4795:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                                "typeString": "contract PermissionPolicyI"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 500,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 498,
                              "name": "curPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 482,
                              "src": "4844:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 497,
                            "name": "PermissionPolicyI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1691,
                            "src": "4826:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PermissionPolicyI_$1691_$",
                              "typeString": "type(contract PermissionPolicyI)"
                            }
                          },
                          "id": 499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4826:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                            "typeString": "contract PermissionPolicyI"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4795:59:2"
                      },
                      {
                        "assignments": [
                          502
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 502,
                            "name": "isOk",
                            "nodeType": "VariableDeclaration",
                            "scope": 539,
                            "src": "4868:9:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 501,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4868:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 509,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 505,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 445,
                              "src": "4903:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 506,
                              "name": "viewer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 447,
                              "src": "4913:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 507,
                              "name": "dataUri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 449,
                              "src": "4921:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 503,
                              "name": "currPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 496,
                              "src": "4880:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PermissionPolicyI_$1691",
                                "typeString": "contract PermissionPolicyI"
                              }
                            },
                            "id": 504,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkPolicy",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1690,
                            "src": "4880:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address,string memory) view external returns (bool)"
                            }
                          },
                          "id": 508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4880:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4868:61:2"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 511,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 445,
                              "src": "4966:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 512,
                              "name": "dataUri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 449,
                              "src": "4976:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 513,
                              "name": "viewer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 447,
                              "src": "4985:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 514,
                              "name": "curPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 482,
                              "src": "4993:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 515,
                              "name": "isOk",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "5004:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 516,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2753,
                                "src": "5010:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "5010:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 510,
                            "name": "StowPolicyChecked",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 243,
                            "src": "4948:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_bool_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,string memory,address,address,bool,address)"
                            }
                          },
                          "id": 518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4948:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 519,
                        "nodeType": "EmitStatement",
                        "src": "4943:78:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 521,
                              "name": "isOk",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 502,
                              "src": "5043:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 520,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2756,
                              2757
                            ],
                            "referencedDeclaration": 2756,
                            "src": "5035:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5035:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 523,
                        "nodeType": "ExpressionStatement",
                        "src": "5035:13:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 474,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 471,
                      "src": "4664:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 475,
                        "name": "policies",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 452,
                        "src": "4668:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4668:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4664:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 525,
                  "initializationExpression": {
                    "assignments": [
                      471
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 471,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 539,
                        "src": "4652:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 470,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "4652:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 473,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4661:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4652:10:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4685:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 471,
                        "src": "4685:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 480,
                    "nodeType": "ExpressionStatement",
                    "src": "4685:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "4647:412:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 528,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 445,
                            "src": "5090:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 529,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 447,
                            "src": "5100:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 530,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "5108:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5108:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 532,
                            "name": "dataUri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 449,
                            "src": "5120:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_string_calldata_ptr",
                              "typeString": "string calldata"
                            }
                          ],
                          "id": 527,
                          "name": "_grantAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 658,
                          "src": "5077:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address,string memory) returns (bool)"
                          }
                        },
                        "id": 533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5077:51:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "5069:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5069:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 535,
                  "nodeType": "ExpressionStatement",
                  "src": "5069:60:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5146:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 463,
                  "id": 537,
                  "nodeType": "Return",
                  "src": "5139:11:2"
                }
              ]
            },
            "documentation": "Give a viewer access to a stow record\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user being granted permission to view the data\n @param dataUri the path of the re-encrypted data",
            "id": 539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 455,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 454,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "4440:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4440:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 457,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 445,
                    "src": "4475:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 458,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "4485:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4485:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 460,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 456,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "4457:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4457:39:2"
              }
            ],
            "name": "grantPolicyBasedAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 445,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4338:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 444,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4338:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 447,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4364:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4364:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 449,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4388:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 448,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4388:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 452,
                  "name": "policies",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4412:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 450,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4412:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 451,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "4412:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4328:103:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 462,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 539,
                  "src": "4531:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 461,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4530:6:2"
            },
            "scope": 711,
            "src": "4297:860:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 566,
              "nodeType": "Block",
              "src": "5622:112:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 557,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 541,
                            "src": "5667:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 558,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 543,
                            "src": "5677:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 559,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2753,
                              "src": "5685:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 560,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5685:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 556,
                          "name": "_revokeAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 710,
                          "src": "5653:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address) returns (bool)"
                          }
                        },
                        "id": 561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5653:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 555,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "5632:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5632:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 563,
                  "nodeType": "ExpressionStatement",
                  "src": "5632:74:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5723:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 554,
                  "id": 565,
                  "nodeType": "Return",
                  "src": "5716:11:2"
                }
              ]
            },
            "documentation": "Revoke a viewer access to a stow record\n Note that this does not necessarily remove the data from storage\n Called by owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data",
            "id": 567,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 546,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 545,
                  "name": "onlyUser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 271,
                  "src": "5521:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5521:8:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 548,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 541,
                    "src": "5556:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 549,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2753,
                      "src": "5566:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5566:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 551,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 547,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "5538:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5538:39:2"
              }
            ],
            "name": "revokeAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 541,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5479:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 540,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5479:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 543,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5497:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 542,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5469:43:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 553,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 567,
                  "src": "5612:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5612:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5611:6:2"
            },
            "scope": 711,
            "src": "5448:286:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 595,
              "nodeType": "Block",
              "src": "6308:85:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 587,
                            "name": "dataHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 569,
                            "src": "6340:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 588,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 571,
                            "src": "6350:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 589,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "6358:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 586,
                          "name": "_revokeAccess",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 710,
                          "src": "6326:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address,address) returns (bool)"
                          }
                        },
                        "id": 590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6326:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 585,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6318:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6318:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 592,
                  "nodeType": "ExpressionStatement",
                  "src": "6318:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6382:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 584,
                  "id": 594,
                  "nodeType": "Return",
                  "src": "6375:11:2"
                }
              ]
            },
            "documentation": "Revoke a viewer access to a stow record\n Note that this does not necessarily remove the data from storage\n Called by delegate to the owner of the record.\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data\n @param owner the owner of the stow record",
            "id": 596,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 576,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "6214:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 577,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 575,
                  "name": "onlyWhenSenderIsDelegate",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 305,
                  "src": "6189:24:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6189:31:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 579,
                    "name": "dataHash",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 569,
                    "src": "6247:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 580,
                    "name": "owner",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 573,
                    "src": "6257:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 581,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 578,
                  "name": "onlyRecordOwnerOf",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 290,
                  "src": "6229:17:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_address_$",
                    "typeString": "modifier (bytes32,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6229:34:2"
              }
            ],
            "name": "revokeAccessbyDelegate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 569,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6132:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 568,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6132:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 571,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6150:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6150:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 573,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6166:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6166:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6122:58:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 583,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 596,
                  "src": "6298:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 582,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6298:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6297:6:2"
            },
            "scope": 711,
            "src": "6091:302:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 657,
              "nodeType": "Block",
              "src": "6842:588:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 612,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 602,
                          "src": "6886:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 614,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6903:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 613,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6895:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6895:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6886:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 611,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6878:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6878:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 618,
                  "nodeType": "ExpressionStatement",
                  "src": "6878:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 624,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 620,
                          "name": "viewer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 600,
                          "src": "6924:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6942:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6934:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6934:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6924:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 619,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6916:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6916:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 626,
                  "nodeType": "ExpressionStatement",
                  "src": "6916:29:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 633,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 629,
                                "name": "dataUri",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 604,
                                "src": "6969:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6963:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": "bytes"
                            },
                            "id": 630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6963:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6963:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6988:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6963:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 627,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "6955:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6955:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 635,
                  "nodeType": "ExpressionStatement",
                  "src": "6955:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 636,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "7216:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 639,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 637,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 598,
                          "src": "7228:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7216:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 640,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 638,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 600,
                        "src": "7238:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7216:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7284:4:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        {
                          "argumentTypes": null,
                          "id": 643,
                          "name": "dataUri",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 604,
                          "src": "7311:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 641,
                        "name": "Permission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "7248:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Permission_$203_storage_ptr_$",
                          "typeString": "type(struct StowPermissions.Permission storage pointer)"
                        }
                      },
                      "id": 644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "canAccess",
                        "dataUri"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "7248:85:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_memory",
                        "typeString": "struct StowPermissions.Permission memory"
                      }
                    },
                    "src": "7216:117:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Permission_$203_storage",
                      "typeString": "struct StowPermissions.Permission storage ref"
                    }
                  },
                  "id": 646,
                  "nodeType": "ExpressionStatement",
                  "src": "7216:117:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 648,
                        "name": "dataHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 598,
                        "src": "7366:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 649,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 602,
                        "src": "7376:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 650,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 600,
                        "src": "7383:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 651,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "7391:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7391:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 647,
                      "name": "StowAccessGranted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 213,
                      "src": "7348:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,address)"
                      }
                    },
                    "id": 653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7348:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 654,
                  "nodeType": "EmitStatement",
                  "src": "7343:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7419:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 610,
                  "id": 656,
                  "nodeType": "Return",
                  "src": "7412:11:2"
                }
              ]
            },
            "documentation": "Internal function to give a viewer access to a stow record\n Called by external functions\n @param dataHash the data hash of the stow record\n @param viewer the user being permissioned to view the data\n @param dataUri the data path of the re-encrypted data",
            "id": 658,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 607,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 606,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "6784:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6784:13:2"
              }
            ],
            "name": "_grantAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 598,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6711:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 600,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6729:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 599,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6729:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 602,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6745:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 601,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6745:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 604,
                  "name": "dataUri",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6760:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 603,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6760:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6710:65:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 609,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 658,
                  "src": "6832:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 608,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6832:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6831:6:2"
            },
            "scope": 711,
            "src": "6689:741:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 709,
              "nodeType": "Block",
              "src": "7928:364:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 672,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 664,
                          "src": "7946:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7963:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7955:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7955:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7946:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 671,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "7938:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7938:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 678,
                  "nodeType": "ExpressionStatement",
                  "src": "7938:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 680,
                              "name": "permissions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 251,
                              "src": "8032:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                                "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                              }
                            },
                            "id": 682,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 681,
                              "name": "dataHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 660,
                              "src": "8044:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8032:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                              "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                            }
                          },
                          "id": 684,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 683,
                            "name": "viewer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 662,
                            "src": "8054:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8032:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Permission_$203_storage",
                            "typeString": "struct StowPermissions.Permission storage ref"
                          }
                        },
                        "id": 685,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "canAccess",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 200,
                        "src": "8032:39:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 679,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2756,
                        2757
                      ],
                      "referencedDeclaration": 2756,
                      "src": "8024:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8024:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 687,
                  "nodeType": "ExpressionStatement",
                  "src": "8024:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 688,
                          "name": "permissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 251,
                          "src": "8082:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => struct StowPermissions.Permission storage ref))"
                          }
                        },
                        "id": 691,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 689,
                          "name": "dataHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 660,
                          "src": "8094:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8082:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Permission_$203_storage_$",
                          "typeString": "mapping(address => struct StowPermissions.Permission storage ref)"
                        }
                      },
                      "id": 692,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 690,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 662,
                        "src": "8104:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8082:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_storage",
                        "typeString": "struct StowPermissions.Permission storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8150:5:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "",
                          "id": 695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8178:2:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 693,
                        "name": "Permission",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 203,
                        "src": "8114:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Permission_$203_storage_ptr_$",
                          "typeString": "type(struct StowPermissions.Permission storage pointer)"
                        }
                      },
                      "id": 696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "canAccess",
                        "dataUri"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "8114:81:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Permission_$203_memory",
                        "typeString": "struct StowPermissions.Permission memory"
                      }
                    },
                    "src": "8082:113:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Permission_$203_storage",
                      "typeString": "struct StowPermissions.Permission storage ref"
                    }
                  },
                  "id": 698,
                  "nodeType": "ExpressionStatement",
                  "src": "8082:113:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 700,
                        "name": "dataHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 660,
                        "src": "8228:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 664,
                        "src": "8238:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 702,
                        "name": "viewer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 662,
                        "src": "8245:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 703,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "8253:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8253:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 699,
                      "name": "StowAccessRevoked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 223,
                      "src": "8210:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address,address,address)"
                      }
                    },
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8210:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 706,
                  "nodeType": "EmitStatement",
                  "src": "8205:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8281:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 670,
                  "id": 708,
                  "nodeType": "Return",
                  "src": "8274:11:2"
                }
              ]
            },
            "documentation": "Internal function to revoke a viewer access to a stow record\n Called by external functions\n Note that this does not necessarily remove the data from storage\n @param dataHash the data hash of the stow record\n @param viewer the user that has permission to view the data\n @param owner the owner of the stow record",
            "id": 710,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 667,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 666,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1965,
                  "src": "7870:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7870:13:2"
              }
            ],
            "name": "_revokeAccess",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 660,
                  "name": "dataHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7813:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 659,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7813:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 662,
                  "name": "viewer",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7831:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 661,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7831:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 664,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7847:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 663,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7847:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7812:49:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 670,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 669,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 710,
                  "src": "7918:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 668,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7918:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7917:6:2"
            },
            "scope": 711,
            "src": "7790:502:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 712,
        "src": "349:7945:2"
      }
    ],
    "src": "0:8295:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x5ab8186e88bb98463e5c6d69867e04b3880c6888",
      "transactionHash": "0x2fdca5cdda925229a7e11232442cc5477184765e14601be643d3948f9a7cd2f4"
    },
    "5777": {
      "events": {},
      "links": {},
      "address": "0x37a6ed8534d21c4f5a5f2bdcb4b512eb72619bc3",
      "transactionHash": "0x490c5152b5ceed51122339c6cc2b1ce37fd171c752d5b3672abb92f61cff62ea"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-11-23T20:15:02.750Z"
}