{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "replica",
          "type": "address"
        }
      ],
      "name": "ReplicaEnrolled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "replica",
          "type": "address"
        }
      ],
      "name": "ReplicaUnenrolled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "watcher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "access",
          "type": "bool"
        }
      ],
      "name": "WatcherPermissionSet",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "domainToReplica",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "home",
      "outputs": [
        {
          "internalType": "contract Home",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        }
      ],
      "name": "isReplica",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        }
      ],
      "name": "ownerEnrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        }
      ],
      "name": "ownerUnenrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "replicaToDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_home",
          "type": "address"
        }
      ],
      "name": "setHome",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcher",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "_access",
          "type": "bool"
        }
      ],
      "name": "setWatcherPermission",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_updater",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "unenrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcher",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        }
      ],
      "name": "watcherPermission",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "667:7759:23:-:0;;;2275:26;;;;;;;;;-1:-1:-1;884:17:11;904:12;:10;:12::i;:::-;926:6;:18;;-1:-1:-1;926:18:11;-1:-1:-1;926:18:11;;;;;;;959:43;;926:18;;-1:-1:-1;926:18:11;959:43;;926:6;;959:43;850:159;667:7759:23;;598:104:14;685:10;598:104;:::o;667:7759:23:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "667:7759:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6026:179;;;;;;;;;;;;;;;;-1:-1:-1;6026:179:23;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6432:118;;;;;;;;;;;;;;;;-1:-1:-1;6432:118:23;;;;:::i;858:49::-;;;;;;;;;;;;;;;;-1:-1:-1;858:49:23;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4049:86;;;;;;;;;;;;;;;;-1:-1:-1;4049:86:23;;;;:::i;:::-;;8340:84;;;:::i;5643:96::-;;;:::i;1085:85:11:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4883:107:23;;;;;;;;;;;;;;;;-1:-1:-1;4883:107:23;;;;:::i;5295:254::-;;;;;;;;;;;;;;;;-1:-1:-1;5295:254:23;;;;;;;;;;;;;;;;;;:::i;785:16::-;;;:::i;964:49::-;;;;;;;;;;;;;;;;-1:-1:-1;964:49:23;;;;:::i;2950:960::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:960:23;;-1:-1:-1;2950:960:23;;-1:-1:-1;;;;;2950:960:23:i;2011:240:11:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:11;;;;:::i;4338:416:23:-;;;;;;;;;;;;;;;;-1:-1:-1;4338:416:23;;;;;;;;;;;:::i;6026:179::-;6161:28;;;6134:4;6161:28;;;:18;:28;;;;;;;;:37;;;;;;;;;;;;;6026:179;;;;:::o;6432:118::-;6513:25;;6490:4;6513:25;;;:15;:25;;;;;;;;:30;;;6432:118::o;858:49::-;;;;;;;;;;;;;;;:::o;4049:86::-;1308:12:11;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4110:4:23::1;:18:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;4049:86::o;8340:84::-;1308:12:11;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8340:84:23:o;5643:96::-;5714:4;;:18;;;;;;;;5689:6;;5714:4;;;:16;;:18;;;;;;;;;;;;;;:4;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5714:18:23;;-1:-1:-1;5643:96:23;:::o;1085:85:11:-;1131:7;1157:6;;;1085:85;:::o;4883:107:23:-;1308:12:11;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:23:23::1;4974:8;4960:13;:23::i;:::-;4883:107:::0;:::o;5295:254::-;1308:12:11;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5432:28:23::1;::::0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;:37:::1;::::0;::::1;::::0;;;;;;;;;;:47;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;5494:48;;;;;;;::::1;::::0;;;;;;5432:37;;5494:48:::1;::::0;;;;;;;;;::::1;5295:254:::0;;;:::o;785:16::-;;;;;;:::o;964:49::-;;;;;;;;;;;;;;;:::o;2950:960::-;3154:24;;;3135:16;3154:24;;;:15;:24;;;;;;;;3196:22;3188:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:36;3389:8;3362:26;:36::i;:::-;3331:67;;3339:8;3331:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3331:27:23;:67;;;3310:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3584:16;3603:149;3639:7;3660:36;3687:8;3660:26;:36::i;:::-;3710:8;3732:10;3603:22;:149::i;:::-;3770:28;;;;;;;:18;:28;;;;;;;;:37;;;;;;;;;;;3584:168;;-1:-1:-1;3770:37:23;;3762:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3880:23;3894:8;3880:13;:23::i;:::-;2950:960;;;;;:::o;2011:240:11:-;1308:12;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2099:22:::1;::::0;::::1;2091:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;::::1;::::0;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2011:240::o;4338:416:23:-;1308:12:11;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:23:23::1;4515:8;4501:13;:23::i;:::-;4534:21;4547:7;4534:12;:21::i;:::-;4618:25;::::0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:35;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;4663:24;;;:15:::1;:24:::0;;;;;;:35;;;::::1;::::0;::::1;::::0;;4713:34;;;;;;4618:35;;4713:34:::1;::::0;;;;;;;;;::::1;4338:416:::0;;:::o;598:104:14:-;685:10;598:104;:::o;6729:324:23:-;6813:25;;;6789:21;6813:25;;;:15;:25;;;;;;;;6852:19;;6848:199;;6887:31;;;6929:1;6887:31;;;:15;:31;;;;;;;;:44;;;;;;;6945:25;;;;;:15;:25;;;;;;:29;;;;;;6993:43;;;;;;;;;;;;;;;;6848:199;6729:324;;:::o;1167:127:29:-;1280:4;1167:127::o;999:129::-;1097:23;;;999:129::o;7642:518:23:-;7812:7;7831:23;7865:36;7892:8;7865:26;:36::i;:::-;7857:73;;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7857:75:23;7983:52;;;7857:75;7983:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7960:85;;;;;7857:75;;-1:-1:-1;8065:37:23;7960:85;8065:28;:37::i;:::-;8055:47;;8119:34;8133:7;8142:10;8119:13;:34::i;:::-;8112:41;7642:518;-1:-1:-1;;;;;;;7642:518:23:o;7175:332::-;7258:24;;;7232:23;7258:24;;;:15;:24;;;;;;;;7296:29;;7292:209;;7341:24;;;7376:1;7341:24;;;:15;:24;;;;;;;;:37;;;;;;;7392:32;;;;;:15;:32;;;;;;:36;;;;;;7447:43;;;;;;;;;;;;;;;;7175:332;;:::o;3638:265:12:-;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:69;;;;;;3638:265::o;1072:740::-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;:::-;1776:29;1072:740;-1:-1:-1;;;;;;1072:740:12:o;1960:1414::-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:12;;;;;;-1:-1:-1;;3294:20:12;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3361:6;1960:1414;-1:-1:-1;;;;;1960:1414:12:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "domainToReplica(uint32)": "b9cff162",
    "home()": "9fa92f9d",
    "isReplica(address)": "5190bc53",
    "localDomain()": "8d3638f4",
    "owner()": "8da5cb5b",
    "ownerEnrollReplica(address,uint32)": "f31faefb",
    "ownerUnenrollReplica(address)": "8f5d90e0",
    "renounceOwnership()": "715018a6",
    "replicaToDomain(address)": "5f8b1dba",
    "setHome(address)": "6ef0f37f",
    "setWatcherPermission(address,uint32,bool)": "916c3470",
    "transferOwnership(address)": "f2fde38b",
    "unenrollReplica(uint32,bytes32,bytes)": "e0e7a913",
    "watcherPermission(address,uint32)": "427ebef5"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
    "id": 27405,
    "exportedSymbols": {
      "ECDSA": [
        23749
      ],
      "Home": [
        26174
      ],
      "Ownable": [
        23633
      ],
      "Replica": [
        26999
      ],
      "TypeCasts": [
        28729
      ],
      "XAppConnectionManager": [
        27404
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:8381:23",
    "nodes": [
      {
        "id": 27008,
        "nodeType": "PragmaDirective",
        "src": "46:22:23",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 27010,
        "nodeType": "ImportDirective",
        "src": "116:32:23",
        "absolutePath": "packages/contracts-core/contracts/Home.sol",
        "file": "./Home.sol",
        "scope": 27405,
        "sourceUnit": 26175,
        "symbolAliases": [
          {
            "foreign": {
              "id": 27009,
              "name": "Home",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:4:23",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 27012,
        "nodeType": "ImportDirective",
        "src": "149:38:23",
        "absolutePath": "packages/contracts-core/contracts/Replica.sol",
        "file": "./Replica.sol",
        "scope": 27405,
        "sourceUnit": 27000,
        "symbolAliases": [
          {
            "foreign": {
              "id": 27011,
              "name": "Replica",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "157:7:23",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 27014,
        "nodeType": "ImportDirective",
        "src": "188:47:23",
        "absolutePath": "packages/contracts-core/contracts/libs/TypeCasts.sol",
        "file": "./libs/TypeCasts.sol",
        "scope": 27405,
        "sourceUnit": 28730,
        "symbolAliases": [
          {
            "foreign": {
              "id": 27013,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "196:9:23",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 27016,
        "nodeType": "ImportDirective",
        "src": "282:69:23",
        "absolutePath": "node_modules/@openzeppelin/contracts/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
        "scope": 27405,
        "sourceUnit": 23750,
        "symbolAliases": [
          {
            "foreign": {
              "id": 27015,
              "name": "ECDSA",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "290:5:23",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 27018,
        "nodeType": "ImportDirective",
        "src": "352:67:23",
        "absolutePath": "node_modules/@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "scope": 27405,
        "sourceUnit": 23634,
        "symbolAliases": [
          {
            "foreign": {
              "id": 27017,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "360:7:23",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 27404,
        "nodeType": "ContractDefinition",
        "src": "667:7759:23",
        "nodes": [
          {
            "id": 27023,
            "nodeType": "VariableDeclaration",
            "src": "785:16:23",
            "constant": false,
            "functionSelector": "9fa92f9d",
            "mutability": "mutable",
            "name": "home",
            "scope": 27404,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Home_$26174",
              "typeString": "contract Home"
            },
            "typeName": {
              "id": 27022,
              "name": "Home",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26174,
              "src": "785:4:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Home_$26174",
                "typeString": "contract Home"
              }
            },
            "visibility": "public"
          },
          {
            "id": 27027,
            "nodeType": "VariableDeclaration",
            "src": "858:49:23",
            "constant": false,
            "functionSelector": "5f8b1dba",
            "mutability": "mutable",
            "name": "replicaToDomain",
            "scope": 27404,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
              "typeString": "mapping(address => uint32)"
            },
            "typeName": {
              "id": 27026,
              "keyType": {
                "id": 27024,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "866:7:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "858:26:23",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                "typeString": "mapping(address => uint32)"
              },
              "valueType": {
                "id": 27025,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "877:6:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 27031,
            "nodeType": "VariableDeclaration",
            "src": "964:49:23",
            "constant": false,
            "functionSelector": "b9cff162",
            "mutability": "mutable",
            "name": "domainToReplica",
            "scope": 27404,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
              "typeString": "mapping(uint32 => address)"
            },
            "typeName": {
              "id": 27030,
              "keyType": {
                "id": 27028,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "972:6:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "964:26:23",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                "typeString": "mapping(uint32 => address)"
              },
              "valueType": {
                "id": 27029,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "982:7:23",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 27037,
            "nodeType": "VariableDeclaration",
            "src": "1098:70:23",
            "constant": false,
            "mutability": "mutable",
            "name": "watcherPermissions",
            "scope": 27404,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(uint32 => bool))"
            },
            "typeName": {
              "id": 27036,
              "keyType": {
                "id": 27032,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1106:7:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1098:43:23",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(uint32 => bool))"
              },
              "valueType": {
                "id": 27035,
                "keyType": {
                  "id": 27033,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1125:6:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "nodeType": "Mapping",
                "src": "1117:23:23",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                  "typeString": "mapping(uint32 => bool)"
                },
                "valueType": {
                  "id": 27034,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1135:4:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 27044,
            "nodeType": "EventDefinition",
            "src": "1419:62:23",
            "anonymous": false,
            "documentation": {
              "id": 27038,
              "nodeType": "StructuredDocumentation",
              "src": "1216:198:23",
              "text": " @notice Emitted when a new Replica is enrolled / added\n @param domain the remote domain of the Home contract for the Replica\n @param replica the address of the Replica"
            },
            "name": "ReplicaEnrolled",
            "parameters": {
              "id": 27043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27040,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27044,
                  "src": "1441:21:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27039,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27042,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27044,
                  "src": "1464:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27041,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1464:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1440:40:23"
            }
          },
          {
            "id": 27051,
            "nodeType": "EventDefinition",
            "src": "1695:64:23",
            "anonymous": false,
            "documentation": {
              "id": 27045,
              "nodeType": "StructuredDocumentation",
              "src": "1487:203:23",
              "text": " @notice Emitted when a new Replica is un-enrolled / removed\n @param domain the remote domain of the Home contract for the Replica\n @param replica the address of the Replica"
            },
            "name": "ReplicaUnenrolled",
            "parameters": {
              "id": 27050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27047,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27051,
                  "src": "1719:21:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27046,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1719:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27049,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27051,
                  "src": "1742:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1742:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1718:40:23"
            }
          },
          {
            "id": 27060,
            "nodeType": "EventDefinition",
            "src": "2064:110:23",
            "anonymous": false,
            "documentation": {
              "id": 27052,
              "nodeType": "StructuredDocumentation",
              "src": "1765:294:23",
              "text": " @notice Emitted when Watcher permissions are changed\n @param domain the remote domain of the Home contract for the Replica\n @param watcher the address of the Watcher\n @param access TRUE if the Watcher was given permissions, FALSE if permissions were removed"
            },
            "name": "WatcherPermissionSet",
            "parameters": {
              "id": 27059,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27054,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27060,
                  "src": "2100:21:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27053,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2100:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27056,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 27060,
                  "src": "2131:15:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27055,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2131:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27058,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "access",
                  "nodeType": "VariableDeclaration",
                  "scope": 27060,
                  "src": "2156:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27057,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2156:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2090:83:23"
            }
          },
          {
            "id": 27066,
            "nodeType": "FunctionDefinition",
            "src": "2275:26:23",
            "body": {
              "id": 27065,
              "nodeType": "Block",
              "src": "2299:2:23",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 27063,
                "modifierName": {
                  "id": 27062,
                  "name": "Ownable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23633,
                  "src": "2289:7:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Ownable_$23633_$",
                    "typeString": "type(contract Ownable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2289:9:23"
              }
            ],
            "name": "",
            "parameters": {
              "id": 27061,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2286:2:23"
            },
            "returnParameters": {
              "id": 27064,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2299:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 27132,
            "nodeType": "FunctionDefinition",
            "src": "2950:960:23",
            "body": {
              "id": 27131,
              "nodeType": "Block",
              "src": "3073:837:23",
              "statements": [
                {
                  "assignments": [
                    27077
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27077,
                      "mutability": "mutable",
                      "name": "_replica",
                      "nodeType": "VariableDeclaration",
                      "scope": 27131,
                      "src": "3135:16:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 27076,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3135:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27081,
                  "initialValue": {
                    "baseExpression": {
                      "id": 27078,
                      "name": "domainToReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27031,
                      "src": "3154:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                        "typeString": "mapping(uint32 => address)"
                      }
                    },
                    "id": 27080,
                    "indexExpression": {
                      "id": 27079,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27069,
                      "src": "3170:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3154:24:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3135:43:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 27088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 27083,
                          "name": "_replica",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27077,
                          "src": "3196:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 27086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3216:1:23",
                              "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": 27085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3208:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 27084,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3208:7:23",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 27087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3208:10:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3196:22:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217265706c69636120657869737473",
                        "id": 27089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3220:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cce8f4e8e4d2b5f114e9c69e4e2ce7c19bf5ee50744f3ffec65b93651aa2d68",
                          "typeString": "literal_string \"!replica exists\""
                        },
                        "value": "!replica exists"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cce8f4e8e4d2b5f114e9c69e4e2ce7c19bf5ee50744f3ffec65b93651aa2d68",
                          "typeString": "literal_string \"!replica exists\""
                        }
                      ],
                      "id": 27082,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3188:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3188:50:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27091,
                  "nodeType": "ExpressionStatement",
                  "src": "3188:50:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 27102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 27094,
                                  "name": "_replica",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27077,
                                  "src": "3339:8:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 27093,
                                "name": "Replica",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26999,
                                "src": "3331:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Replica_$26999_$",
                                  "typeString": "type(contract Replica)"
                                }
                              },
                              "id": 27095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3331:17:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Replica_$26999",
                                "typeString": "contract Replica"
                              }
                            },
                            "id": 27096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updater",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 26233,
                            "src": "3331:25:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 27097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3331:27:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 27100,
                              "name": "_updater",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27071,
                              "src": "3389:8:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 27098,
                              "name": "TypeCasts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28729,
                              "src": "3362:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TypeCasts_$28729_$",
                                "typeString": "type(library TypeCasts)"
                              }
                            },
                            "id": 27099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "bytes32ToAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28728,
                            "src": "3362:26:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) pure returns (address)"
                            }
                          },
                          "id": 27101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3362:36:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3331:67:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2163757272656e742075706461746572",
                        "id": 27103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3412:18:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a6fb58e7588e05c178c596e25892db6b099bc79b87ee560344d57d54f192f03",
                          "typeString": "literal_string \"!current updater\""
                        },
                        "value": "!current updater"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a6fb58e7588e05c178c596e25892db6b099bc79b87ee560344d57d54f192f03",
                          "typeString": "literal_string \"!current updater\""
                        }
                      ],
                      "id": 27092,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3310:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3310:130:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27105,
                  "nodeType": "ExpressionStatement",
                  "src": "3310:130:23"
                },
                {
                  "assignments": [
                    27107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27107,
                      "mutability": "mutable",
                      "name": "_watcher",
                      "nodeType": "VariableDeclaration",
                      "scope": 27131,
                      "src": "3584:16:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 27106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3584:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27117,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 27109,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27069,
                        "src": "3639:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 27112,
                            "name": "_replica",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27077,
                            "src": "3687:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27110,
                            "name": "TypeCasts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28729,
                            "src": "3660:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TypeCasts_$28729_$",
                              "typeString": "type(library TypeCasts)"
                            }
                          },
                          "id": 27111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28709,
                          "src": "3660:26:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 27113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3660:36:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 27114,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27071,
                        "src": "3710:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 27115,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27073,
                        "src": "3732:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 27108,
                      "name": "_recoverWatcherFromSig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27395,
                      "src": "3603:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory) view returns (address)"
                      }
                    },
                    "id": 27116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:149:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3584:168:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 27119,
                            "name": "watcherPermissions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27037,
                            "src": "3770:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                              "typeString": "mapping(address => mapping(uint32 => bool))"
                            }
                          },
                          "id": 27121,
                          "indexExpression": {
                            "id": 27120,
                            "name": "_watcher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27107,
                            "src": "3789:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3770:28:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                            "typeString": "mapping(uint32 => bool)"
                          }
                        },
                        "id": 27123,
                        "indexExpression": {
                          "id": 27122,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27069,
                          "src": "3799:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3770:37:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2176616c69642077617463686572",
                        "id": 27124,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3809:16:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f195e58cf6d3c35adc376adc2f2698efe3605d072d49b50d7723e39dd7232935",
                          "typeString": "literal_string \"!valid watcher\""
                        },
                        "value": "!valid watcher"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f195e58cf6d3c35adc376adc2f2698efe3605d072d49b50d7723e39dd7232935",
                          "typeString": "literal_string \"!valid watcher\""
                        }
                      ],
                      "id": 27118,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3762:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3762:64:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27126,
                  "nodeType": "ExpressionStatement",
                  "src": "3762:64:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27128,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27077,
                        "src": "3894:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27127,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27304,
                      "src": "3880:13:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3880:23:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27130,
                  "nodeType": "ExpressionStatement",
                  "src": "3880:23:23"
                }
              ]
            },
            "documentation": {
              "id": 27067,
              "nodeType": "StructuredDocumentation",
              "src": "2360:585:23",
              "text": " @notice Un-Enroll a replica contract\n in the case that fraud was detected on the Home\n @dev in the future, if fraud occurs on the Home contract,\n the Watcher will submit their signature directly to the Home\n and it can be relayed to all remote chains to un-enroll the Replicas\n @param _domain the remote domain of the Home contract for the Replica\n @param _updater the address of the Updater for the Home contract (also stored on Replica)\n @param _signature signature of watcher on (domain, replica address, updater address)"
            },
            "functionSelector": "e0e7a913",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unenrollReplica",
            "parameters": {
              "id": 27074,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27069,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27132,
                  "src": "2984:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27068,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2984:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27071,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 27132,
                  "src": "3008:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27070,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3008:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27073,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 27132,
                  "src": "3034:23:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27072,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3034:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2974:89:23"
            },
            "returnParameters": {
              "id": 27075,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3073:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27147,
            "nodeType": "FunctionDefinition",
            "src": "4049:86:23",
            "body": {
              "id": 27146,
              "nodeType": "Block",
              "src": "4100:35:23",
              "statements": [
                {
                  "expression": {
                    "id": 27144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 27140,
                      "name": "home",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27023,
                      "src": "4110:4:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Home_$26174",
                        "typeString": "contract Home"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 27142,
                          "name": "_home",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27135,
                          "src": "4122:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 27141,
                        "name": "Home",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26174,
                        "src": "4117:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Home_$26174_$",
                          "typeString": "type(contract Home)"
                        }
                      },
                      "id": 27143,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4117:11:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Home_$26174",
                        "typeString": "contract Home"
                      }
                    },
                    "src": "4110:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Home_$26174",
                      "typeString": "contract Home"
                    }
                  },
                  "id": 27145,
                  "nodeType": "ExpressionStatement",
                  "src": "4110:18:23"
                }
              ]
            },
            "documentation": {
              "id": 27133,
              "nodeType": "StructuredDocumentation",
              "src": "3916:128:23",
              "text": " @notice Set the address of the local Home contract\n @param _home the address of the local Home contract"
            },
            "functionSelector": "6ef0f37f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 27138,
                "modifierName": {
                  "id": 27137,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23582,
                  "src": "4090:9:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4090:9:23"
              }
            ],
            "name": "setHome",
            "parameters": {
              "id": 27136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27135,
                  "mutability": "mutable",
                  "name": "_home",
                  "nodeType": "VariableDeclaration",
                  "scope": 27147,
                  "src": "4066:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4066:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4065:15:23"
            },
            "returnParameters": {
              "id": 27139,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4100:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27183,
            "nodeType": "FunctionDefinition",
            "src": "4338:416:23",
            "body": {
              "id": 27182,
              "nodeType": "Block",
              "src": "4439:315:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27158,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27150,
                        "src": "4515:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27157,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27304,
                      "src": "4501:13:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4501:23:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27160,
                  "nodeType": "ExpressionStatement",
                  "src": "4501:23:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27162,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27152,
                        "src": "4547:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 27161,
                      "name": "_clearDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27345,
                      "src": "4534:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$",
                        "typeString": "function (uint32)"
                      }
                    },
                    "id": 27163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4534:21:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27164,
                  "nodeType": "ExpressionStatement",
                  "src": "4534:21:23"
                },
                {
                  "expression": {
                    "id": 27169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 27165,
                        "name": "replicaToDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27027,
                        "src": "4618:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                          "typeString": "mapping(address => uint32)"
                        }
                      },
                      "id": 27167,
                      "indexExpression": {
                        "id": 27166,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27150,
                        "src": "4634:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4618:25:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27168,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27152,
                      "src": "4646:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "4618:35:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 27170,
                  "nodeType": "ExpressionStatement",
                  "src": "4618:35:23"
                },
                {
                  "expression": {
                    "id": 27175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 27171,
                        "name": "domainToReplica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27031,
                        "src": "4663:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                          "typeString": "mapping(uint32 => address)"
                        }
                      },
                      "id": 27173,
                      "indexExpression": {
                        "id": 27172,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27152,
                        "src": "4679:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4663:24:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27174,
                      "name": "_replica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27150,
                      "src": "4690:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4663:35:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 27176,
                  "nodeType": "ExpressionStatement",
                  "src": "4663:35:23"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 27178,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27152,
                        "src": "4729:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 27179,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27150,
                        "src": "4738:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27177,
                      "name": "ReplicaEnrolled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27044,
                      "src": "4713:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,address)"
                      }
                    },
                    "id": 27180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4713:34:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27181,
                  "nodeType": "EmitStatement",
                  "src": "4708:39:23"
                }
              ]
            },
            "documentation": {
              "id": 27148,
              "nodeType": "StructuredDocumentation",
              "src": "4141:192:23",
              "text": " @notice Allow Owner to enroll Replica contract\n @param _replica the address of the Replica\n @param _domain the remote domain of the Home contract for the Replica"
            },
            "functionSelector": "f31faefb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 27155,
                "modifierName": {
                  "id": 27154,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23582,
                  "src": "4425:9:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4425:9:23"
              }
            ],
            "name": "ownerEnrollReplica",
            "parameters": {
              "id": 27153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27150,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27183,
                  "src": "4366:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27149,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4366:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27152,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27183,
                  "src": "4384:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27151,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4384:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4365:34:23"
            },
            "returnParameters": {
              "id": 27156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4439:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27196,
            "nodeType": "FunctionDefinition",
            "src": "4883:107:23",
            "body": {
              "id": 27195,
              "nodeType": "Block",
              "src": "4950:40:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27192,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27186,
                        "src": "4974:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27191,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27304,
                      "src": "4960:13:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4960:23:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27194,
                  "nodeType": "ExpressionStatement",
                  "src": "4960:23:23"
                }
              ]
            },
            "documentation": {
              "id": 27184,
              "nodeType": "StructuredDocumentation",
              "src": "4760:118:23",
              "text": " @notice Allow Owner to un-enroll Replica contract\n @param _replica the address of the Replica"
            },
            "functionSelector": "8f5d90e0",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 27189,
                "modifierName": {
                  "id": 27188,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23582,
                  "src": "4940:9:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4940:9:23"
              }
            ],
            "name": "ownerUnenrollReplica",
            "parameters": {
              "id": 27187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27186,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27196,
                  "src": "4913:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27185,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4913:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4912:18:23"
            },
            "returnParameters": {
              "id": 27190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4950:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27223,
            "nodeType": "FunctionDefinition",
            "src": "5295:254:23",
            "body": {
              "id": 27222,
              "nodeType": "Block",
              "src": "5422:127:23",
              "statements": [
                {
                  "expression": {
                    "id": 27214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 27208,
                          "name": "watcherPermissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27037,
                          "src": "5432:18:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(uint32 => bool))"
                          }
                        },
                        "id": 27211,
                        "indexExpression": {
                          "id": 27209,
                          "name": "_watcher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27199,
                          "src": "5451:8:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5432:28:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                          "typeString": "mapping(uint32 => bool)"
                        }
                      },
                      "id": 27212,
                      "indexExpression": {
                        "id": 27210,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27201,
                        "src": "5461:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5432:37:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27213,
                      "name": "_access",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27203,
                      "src": "5472:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5432:47:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27215,
                  "nodeType": "ExpressionStatement",
                  "src": "5432:47:23"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 27217,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27201,
                        "src": "5515:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 27218,
                        "name": "_watcher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27199,
                        "src": "5524:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 27219,
                        "name": "_access",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27203,
                        "src": "5534:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 27216,
                      "name": "WatcherPermissionSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27060,
                      "src": "5494:20:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (uint32,address,bool)"
                      }
                    },
                    "id": 27220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5494:48:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27221,
                  "nodeType": "EmitStatement",
                  "src": "5489:53:23"
                }
              ]
            },
            "documentation": {
              "id": 27197,
              "nodeType": "StructuredDocumentation",
              "src": "4996:294:23",
              "text": " @notice Allow Owner to set Watcher permissions for a Replica\n @param _watcher the address of the Watcher\n @param _domain the remote domain of the Home contract for the Replica\n @param _access TRUE to give the Watcher permissions, FALSE to remove permissions"
            },
            "functionSelector": "916c3470",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 27206,
                "modifierName": {
                  "id": 27205,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23582,
                  "src": "5412:9:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5412:9:23"
              }
            ],
            "name": "setWatcherPermission",
            "parameters": {
              "id": 27204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27199,
                  "mutability": "mutable",
                  "name": "_watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 27223,
                  "src": "5334:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5334:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27201,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27223,
                  "src": "5360:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27200,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5360:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27203,
                  "mutability": "mutable",
                  "name": "_access",
                  "nodeType": "VariableDeclaration",
                  "scope": 27223,
                  "src": "5384:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27202,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5384:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5324:78:23"
            },
            "returnParameters": {
              "id": 27207,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5422:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27234,
            "nodeType": "FunctionDefinition",
            "src": "5643:96:23",
            "body": {
              "id": 27233,
              "nodeType": "Block",
              "src": "5697:42:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 27229,
                        "name": "home",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27023,
                        "src": "5714:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Home_$26174",
                          "typeString": "contract Home"
                        }
                      },
                      "id": 27230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "localDomain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26231,
                      "src": "5714:16:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$",
                        "typeString": "function () view external returns (uint32)"
                      }
                    },
                    "id": 27231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5714:18:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 27228,
                  "id": 27232,
                  "nodeType": "Return",
                  "src": "5707:25:23"
                }
              ]
            },
            "documentation": {
              "id": 27224,
              "nodeType": "StructuredDocumentation",
              "src": "5555:83:23",
              "text": " @notice Query local domain from Home\n @return local domain"
            },
            "functionSelector": "8d3638f4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "localDomain",
            "parameters": {
              "id": 27225,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5663:2:23"
            },
            "returnParameters": {
              "id": 27228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27227,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 27234,
                  "src": "5689:6:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27226,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5689:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5688:8:23"
            },
            "scope": 27404,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27251,
            "nodeType": "FunctionDefinition",
            "src": "6026:179:23",
            "body": {
              "id": 27250,
              "nodeType": "Block",
              "src": "6144:61:23",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 27244,
                        "name": "watcherPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27037,
                        "src": "6161:18:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(uint32 => bool))"
                        }
                      },
                      "id": 27246,
                      "indexExpression": {
                        "id": 27245,
                        "name": "_watcher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27237,
                        "src": "6180:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6161:28:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                        "typeString": "mapping(uint32 => bool)"
                      }
                    },
                    "id": 27248,
                    "indexExpression": {
                      "id": 27247,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27239,
                      "src": "6190:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6161:37:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 27243,
                  "id": 27249,
                  "nodeType": "Return",
                  "src": "6154:44:23"
                }
              ]
            },
            "documentation": {
              "id": 27235,
              "nodeType": "StructuredDocumentation",
              "src": "5745:276:23",
              "text": " @notice Get access permissions for the watcher on the domain\n @param _watcher the address of the watcher\n @param _domain the domain to check for watcher permissions\n @return TRUE iff _watcher has permission to un-enroll replicas on _domain"
            },
            "functionSelector": "427ebef5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "watcherPermission",
            "parameters": {
              "id": 27240,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27237,
                  "mutability": "mutable",
                  "name": "_watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 27251,
                  "src": "6053:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6053:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27239,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27251,
                  "src": "6071:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27238,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6071:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6052:34:23"
            },
            "returnParameters": {
              "id": 27243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27242,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 27251,
                  "src": "6134:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27241,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6134:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6133:6:23"
            },
            "scope": 27404,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 27266,
            "nodeType": "FunctionDefinition",
            "src": "6432:118:23",
            "body": {
              "id": 27265,
              "nodeType": "Block",
              "src": "6496:54:23",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 27263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 27259,
                        "name": "replicaToDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27027,
                        "src": "6513:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                          "typeString": "mapping(address => uint32)"
                        }
                      },
                      "id": 27261,
                      "indexExpression": {
                        "id": 27260,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27254,
                        "src": "6529:8:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6513:25:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 27262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6542:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6513:30:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 27258,
                  "id": 27264,
                  "nodeType": "Return",
                  "src": "6506:37:23"
                }
              ]
            },
            "documentation": {
              "id": 27252,
              "nodeType": "StructuredDocumentation",
              "src": "6262:165:23",
              "text": " @notice Check whether _replica is enrolled\n @param _replica the replica to check for enrollment\n @return TRUE iff _replica is enrolled"
            },
            "functionSelector": "5190bc53",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isReplica",
            "parameters": {
              "id": 27255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27254,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27266,
                  "src": "6451:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6451:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6450:18:23"
            },
            "returnParameters": {
              "id": 27258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27257,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 27266,
                  "src": "6490:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27256,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6490:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6489:6:23"
            },
            "scope": 27404,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 27304,
            "nodeType": "FunctionDefinition",
            "src": "6729:324:23",
            "body": {
              "id": 27303,
              "nodeType": "Block",
              "src": "6779:274:23",
              "statements": [
                {
                  "assignments": [
                    27273
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27273,
                      "mutability": "mutable",
                      "name": "_currentDomain",
                      "nodeType": "VariableDeclaration",
                      "scope": 27303,
                      "src": "6789:21:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 27272,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6789:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27277,
                  "initialValue": {
                    "baseExpression": {
                      "id": 27274,
                      "name": "replicaToDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27027,
                      "src": "6813:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                        "typeString": "mapping(address => uint32)"
                      }
                    },
                    "id": 27276,
                    "indexExpression": {
                      "id": 27275,
                      "name": "_replica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27269,
                      "src": "6829:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6813:25:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6789:49:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 27280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 27278,
                      "name": "_currentDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27273,
                      "src": "6852:14:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 27279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6870:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6852:19:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27302,
                  "nodeType": "IfStatement",
                  "src": "6848:199:23",
                  "trueBody": {
                    "id": 27301,
                    "nodeType": "Block",
                    "src": "6873:174:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 27288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 27281,
                              "name": "domainToReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27031,
                              "src": "6887:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                                "typeString": "mapping(uint32 => address)"
                              }
                            },
                            "id": 27283,
                            "indexExpression": {
                              "id": 27282,
                              "name": "_currentDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27273,
                              "src": "6903:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6887:31:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 27286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6929:1:23",
                                "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": 27285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6921:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 27284,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6921:7:23",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 27287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6921:10:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "6887:44:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 27289,
                        "nodeType": "ExpressionStatement",
                        "src": "6887:44:23"
                      },
                      {
                        "expression": {
                          "id": 27294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 27290,
                              "name": "replicaToDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27027,
                              "src": "6945:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                                "typeString": "mapping(address => uint32)"
                              }
                            },
                            "id": 27292,
                            "indexExpression": {
                              "id": 27291,
                              "name": "_replica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27269,
                              "src": "6961:8:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6945:25:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 27293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6973:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6945:29:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 27295,
                        "nodeType": "ExpressionStatement",
                        "src": "6945:29:23"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 27297,
                              "name": "_currentDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27273,
                              "src": "7011:14:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 27298,
                              "name": "_replica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27269,
                              "src": "7027:8:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 27296,
                            "name": "ReplicaUnenrolled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27051,
                            "src": "6993:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (uint32,address)"
                            }
                          },
                          "id": 27299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6993:43:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27300,
                        "nodeType": "EmitStatement",
                        "src": "6988:48:23"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27267,
              "nodeType": "StructuredDocumentation",
              "src": "6609:115:23",
              "text": " @notice Remove the replica from the two-way mappings\n @param _replica replica to un-enroll"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_clearReplica",
            "parameters": {
              "id": 27270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27269,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27304,
                  "src": "6752:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6752:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6751:18:23"
            },
            "returnParameters": {
              "id": 27271,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6779:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 27345,
            "nodeType": "FunctionDefinition",
            "src": "7175:332:23",
            "body": {
              "id": 27344,
              "nodeType": "Block",
              "src": "7222:285:23",
              "statements": [
                {
                  "assignments": [
                    27311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27311,
                      "mutability": "mutable",
                      "name": "_currentReplica",
                      "nodeType": "VariableDeclaration",
                      "scope": 27344,
                      "src": "7232:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 27310,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7232:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27315,
                  "initialValue": {
                    "baseExpression": {
                      "id": 27312,
                      "name": "domainToReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27031,
                      "src": "7258:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                        "typeString": "mapping(uint32 => address)"
                      }
                    },
                    "id": 27314,
                    "indexExpression": {
                      "id": 27313,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27307,
                      "src": "7274:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7258:24:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7232:50:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 27321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 27316,
                      "name": "_currentReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27311,
                      "src": "7296:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 27319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7323:1:23",
                          "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": 27318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7315:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 27317,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7315:7:23",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 27320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7315:10:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "7296:29:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27343,
                  "nodeType": "IfStatement",
                  "src": "7292:209:23",
                  "trueBody": {
                    "id": 27342,
                    "nodeType": "Block",
                    "src": "7327:174:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 27329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 27322,
                              "name": "domainToReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27031,
                              "src": "7341:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                                "typeString": "mapping(uint32 => address)"
                              }
                            },
                            "id": 27324,
                            "indexExpression": {
                              "id": 27323,
                              "name": "_domain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27307,
                              "src": "7357:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7341:24:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 27327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7376:1:23",
                                "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": 27326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7368:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 27325,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7368:7:23",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 27328,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7368:10:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7341:37:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 27330,
                        "nodeType": "ExpressionStatement",
                        "src": "7341:37:23"
                      },
                      {
                        "expression": {
                          "id": 27335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 27331,
                              "name": "replicaToDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27027,
                              "src": "7392:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                                "typeString": "mapping(address => uint32)"
                              }
                            },
                            "id": 27333,
                            "indexExpression": {
                              "id": 27332,
                              "name": "_currentReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27311,
                              "src": "7408:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7392:32:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 27334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7392:36:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 27336,
                        "nodeType": "ExpressionStatement",
                        "src": "7392:36:23"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 27338,
                              "name": "_domain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27307,
                              "src": "7465:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 27339,
                              "name": "_currentReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27311,
                              "src": "7474:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 27337,
                            "name": "ReplicaUnenrolled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27051,
                            "src": "7447:17:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (uint32,address)"
                            }
                          },
                          "id": 27340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7447:43:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27341,
                        "nodeType": "EmitStatement",
                        "src": "7442:48:23"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27305,
              "nodeType": "StructuredDocumentation",
              "src": "7059:111:23",
              "text": " @notice remove the domain from the two-way mapping\n @param _domain domain to un-enroll"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_clearDomain",
            "parameters": {
              "id": 27308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27307,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27345,
                  "src": "7197:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27306,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7197:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7196:16:23"
            },
            "returnParameters": {
              "id": 27309,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7222:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 27395,
            "nodeType": "FunctionDefinition",
            "src": "7642:518:23",
            "body": {
              "id": 27394,
              "nodeType": "Block",
              "src": "7821:339:23",
              "statements": [
                {
                  "assignments": [
                    27360
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27360,
                      "mutability": "mutable",
                      "name": "_homeDomainHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 27394,
                      "src": "7831:23:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 27359,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7831:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27369,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 27364,
                                "name": "_replica",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27350,
                                "src": "7892:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 27362,
                                "name": "TypeCasts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28729,
                                "src": "7865:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TypeCasts_$28729_$",
                                  "typeString": "type(library TypeCasts)"
                                }
                              },
                              "id": 27363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bytes32ToAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28728,
                              "src": "7865:26:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) pure returns (address)"
                              }
                            },
                            "id": 27365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7865:36:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 27361,
                          "name": "Replica",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26999,
                          "src": "7857:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Replica_$26999_$",
                            "typeString": "type(contract Replica)"
                          }
                        },
                        "id": 27366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7857:45:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Replica_$26999",
                          "typeString": "contract Replica"
                        }
                      },
                      "id": 27367,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "homeDomainHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26952,
                      "src": "7857:73:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 27368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7857:75:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7831:101:23"
                },
                {
                  "assignments": [
                    27371
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 27371,
                      "mutability": "mutable",
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 27394,
                      "src": "7942:15:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 27370,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7942:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 27380,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 27375,
                            "name": "_homeDomainHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27360,
                            "src": "8000:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 27376,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27348,
                            "src": "8017:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 27377,
                            "name": "_updater",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27352,
                            "src": "8026:8:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 27373,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "7983:3:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 27374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "7983:16:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 27378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7983:52:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 27372,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "7960:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 27379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7960:85:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7942:103:23"
                },
                {
                  "expression": {
                    "id": 27386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 27381,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27371,
                      "src": "8055:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 27384,
                          "name": "_digest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27371,
                          "src": "8094:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27382,
                          "name": "ECDSA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23749,
                          "src": "8065:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ECDSA_$23749_$",
                            "typeString": "type(library ECDSA)"
                          }
                        },
                        "id": 27383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 23748,
                        "src": "8065:28:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 27385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8065:37:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8055:47:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 27387,
                  "nodeType": "ExpressionStatement",
                  "src": "8055:47:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27390,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27371,
                        "src": "8133:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 27391,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27354,
                        "src": "8142:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 27388,
                        "name": "ECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23749,
                        "src": "8119:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ECDSA_$23749_$",
                          "typeString": "type(library ECDSA)"
                        }
                      },
                      "id": 27389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23674,
                      "src": "8119:13:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 27392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8119:34:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 27358,
                  "id": 27393,
                  "nodeType": "Return",
                  "src": "8112:41:23"
                }
              ]
            },
            "documentation": {
              "id": 27346,
              "nodeType": "StructuredDocumentation",
              "src": "7513:124:23",
              "text": " @notice Get the Watcher address from the provided signature\n @return address of watcher that signed"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverWatcherFromSig",
            "parameters": {
              "id": 27355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27348,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 27395,
                  "src": "7683:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 27347,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7683:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27350,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 27395,
                  "src": "7707:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27349,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7707:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27352,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 27395,
                  "src": "7733:16:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27351,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7733:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27354,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 27395,
                  "src": "7759:23:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27353,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7759:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7673:115:23"
            },
            "returnParameters": {
              "id": 27358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27357,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 27395,
                  "src": "7812:7:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7812:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7811:9:23"
            },
            "scope": 27404,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 27403,
            "nodeType": "FunctionDefinition",
            "src": "8340:84:23",
            "body": {
              "id": 27402,
              "nodeType": "Block",
              "src": "8395:29:23",
              "statements": []
            },
            "baseFunctions": [
              23604
            ],
            "documentation": {
              "id": 27396,
              "nodeType": "StructuredDocumentation",
              "src": "8166:169:23",
              "text": " @dev should be impossible to renounce ownership;\n we override OpenZeppelin Ownable implementation\n of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 27400,
                "modifierName": {
                  "id": 27399,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23582,
                  "src": "8385:9:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8385:9:23"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 27398,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8376:8:23"
            },
            "parameters": {
              "id": 27397,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8366:2:23"
            },
            "returnParameters": {
              "id": 27401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8395:0:23"
            },
            "scope": 27404,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 27020,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23633,
              "src": "701:7:23",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$23633",
                "typeString": "contract Ownable"
              }
            },
            "id": 27021,
            "nodeType": "InheritanceSpecifier",
            "src": "701:7:23"
          }
        ],
        "contractDependencies": [
          23633,
          24068
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 27019,
          "nodeType": "StructuredDocumentation",
          "src": "421:245:23",
          "text": " @title XAppConnectionManager\n @author Illusory Systems Inc.\n @notice Manages a registry of local Replica contracts\n for remote Home domains. Accepts Watcher signatures\n to un-enroll Replicas attached to fraudulent remote Homes"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          27404,
          23633,
          24068
        ],
        "name": "XAppConnectionManager",
        "scope": 27405
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 23
}