{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "enrollRemoteRouter(uint32,bytes32)": "b49c53a7",
    "handle(uint32,uint32,bytes32,bytes)": "ab2dc3f5",
    "owner()": "8da5cb5b",
    "remotes(uint32)": "83bbb806",
    "renounceOwnership()": "715018a6",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-router/contracts/Router.sol",
    "id": 46769,
    "exportedSymbols": {
      "IMessageRecipient": [
        45034
      ],
      "Router": [
        46768
      ],
      "XAppConnectionClient": [
        46866
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:2593:79",
    "nodes": [
      {
        "id": 46644,
        "nodeType": "PragmaDirective",
        "src": "46:22:79",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 46646,
        "nodeType": "ImportDirective",
        "src": "116:64:79",
        "absolutePath": "packages/contracts-router/contracts/XAppConnectionClient.sol",
        "file": "./XAppConnectionClient.sol",
        "scope": 46769,
        "sourceUnit": 46867,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46645,
              "name": "XAppConnectionClient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:20:79",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46648,
        "nodeType": "ImportDirective",
        "src": "227:103:79",
        "absolutePath": "packages/contracts-core/contracts/interfaces/IMessageRecipient.sol",
        "file": "@nomad-xyz/contracts-core/contracts/interfaces/IMessageRecipient.sol",
        "scope": 46769,
        "sourceUnit": 45035,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46647,
              "name": "IMessageRecipient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "235:17:79",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46768,
        "nodeType": "ContractDefinition",
        "src": "332:2306:79",
        "nodes": [
          {
            "id": 46656,
            "nodeType": "VariableDeclaration",
            "src": "456:41:79",
            "constant": false,
            "functionSelector": "83bbb806",
            "mutability": "mutable",
            "name": "remotes",
            "scope": 46768,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$",
              "typeString": "mapping(uint32 => bytes32)"
            },
            "typeName": {
              "id": 46655,
              "keyType": {
                "id": 46653,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "464:6:79",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "456:26:79",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$",
                "typeString": "mapping(uint32 => bytes32)"
              },
              "valueType": {
                "id": 46654,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "474:7:79",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 46660,
            "nodeType": "VariableDeclaration",
            "src": "503:25:79",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 46768,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 46657,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "503:7:79",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 46659,
              "length": {
                "hexValue": "3439",
                "id": 46658,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "511:2:79",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "503:11:79",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 46677,
            "nodeType": "ModifierDefinition",
            "src": "808:147:79",
            "body": {
              "id": 46676,
              "nodeType": "Block",
              "src": "867:88:79",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 46669,
                            "name": "_origin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46663,
                            "src": "901:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 46670,
                            "name": "_router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46665,
                            "src": "910:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 46668,
                          "name": "_isRemoteRouter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46742,
                          "src": "885:15:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (uint32,bytes32) view returns (bool)"
                          }
                        },
                        "id": 46671,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "885:33:79",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172656d6f746520726f75746572",
                        "id": 46672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "920:16:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9bc322113f88fac029da5e70dda1b6c2bb6b8524881c67828a5ec49d7ca13c13",
                          "typeString": "literal_string \"!remote router\""
                        },
                        "value": "!remote router"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9bc322113f88fac029da5e70dda1b6c2bb6b8524881c67828a5ec49d7ca13c13",
                          "typeString": "literal_string \"!remote router\""
                        }
                      ],
                      "id": 46667,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "877:7:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 46673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "877:60:79",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 46674,
                  "nodeType": "ExpressionStatement",
                  "src": "877:60:79"
                },
                {
                  "id": 46675,
                  "nodeType": "PlaceholderStatement",
                  "src": "947:1:79"
                }
              ]
            },
            "documentation": {
              "id": 46661,
              "nodeType": "StructuredDocumentation",
              "src": "605:198:79",
              "text": " @notice Only accept messages from a remote Router contract\n @param _origin The domain the message is coming from\n @param _router The address the message is coming from"
            },
            "name": "onlyRemoteRouter",
            "parameters": {
              "id": 46666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46663,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 46677,
                  "src": "834:14:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46662,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "834:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46665,
                  "mutability": "mutable",
                  "name": "_router",
                  "nodeType": "VariableDeclaration",
                  "scope": 46677,
                  "src": "850:15:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 46664,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "833:33:79"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 46706,
            "nodeType": "FunctionDefinition",
            "src": "1242:214:79",
            "body": {
              "id": 46705,
              "nodeType": "Block",
              "src": "1342:114:79",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 46695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 46691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 46688,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46680,
                            "src": "1360:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 46689,
                              "name": "_localDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 46865,
                              "src": "1371:12:79",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                                "typeString": "function () view returns (uint32)"
                              }
                            },
                            "id": 46690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1371:14:79",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "1360:25:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 46694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 46692,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46680,
                            "src": "1389:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 46693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1400:1:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1389:12:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1360:41:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21646f6d61696e",
                        "id": 46696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1403:9:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_713a62ac7d6699d26c5564c3c29686998f05bfd595516cfcf220240bfe0fc1a7",
                          "typeString": "literal_string \"!domain\""
                        },
                        "value": "!domain"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_713a62ac7d6699d26c5564c3c29686998f05bfd595516cfcf220240bfe0fc1a7",
                          "typeString": "literal_string \"!domain\""
                        }
                      ],
                      "id": 46687,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1352:7:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 46697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1352:61:79",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 46698,
                  "nodeType": "ExpressionStatement",
                  "src": "1352:61:79"
                },
                {
                  "expression": {
                    "id": 46703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 46699,
                        "name": "remotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46656,
                        "src": "1423:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$",
                          "typeString": "mapping(uint32 => bytes32)"
                        }
                      },
                      "id": 46701,
                      "indexExpression": {
                        "id": 46700,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46680,
                        "src": "1431:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1423:16:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 46702,
                      "name": "_router",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46682,
                      "src": "1442:7:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1423:26:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 46704,
                  "nodeType": "ExpressionStatement",
                  "src": "1423:26:79"
                }
              ]
            },
            "documentation": {
              "id": 46678,
              "nodeType": "StructuredDocumentation",
              "src": "1014:223:79",
              "text": " @notice Register the address of a Router contract for the same xApp on a remote chain\n @param _domain The domain of the remote xApp Router\n @param _router The address of the remote xApp Router"
            },
            "functionSelector": "b49c53a7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 46685,
                "modifierName": {
                  "id": 46684,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "1328:9:79",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1328:9:79"
              }
            ],
            "name": "enrollRemoteRouter",
            "parameters": {
              "id": 46683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46680,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 46706,
                  "src": "1270:14:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46679,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46682,
                  "mutability": "mutable",
                  "name": "_router",
                  "nodeType": "VariableDeclaration",
                  "scope": 46706,
                  "src": "1286:15:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 46681,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1286:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1269:33:79"
            },
            "returnParameters": {
              "id": 46686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1342:0:79"
            },
            "scope": 46768,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46718,
            "nodeType": "FunctionDefinition",
            "src": "1514:151:79",
            "baseFunctions": [
              45033
            ],
            "functionSelector": "ab2dc3f5",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "handle",
            "overrides": {
              "id": 46716,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1656:8:79"
            },
            "parameters": {
              "id": 46715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46708,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 46718,
                  "src": "1539:14:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46707,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1539:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46710,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 46718,
                  "src": "1563:13:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46709,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1563:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46712,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 46718,
                  "src": "1586:15:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 46711,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1586:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46714,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 46718,
                  "src": "1611:21:79",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 46713,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1611:5:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1529:109:79"
            },
            "returnParameters": {
              "id": 46717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1664:0:79"
            },
            "scope": 46768,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 46742,
            "nodeType": "FunctionDefinition",
            "src": "1973:191:79",
            "body": {
              "id": 46741,
              "nodeType": "Block",
              "src": "2088:76:79",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 46739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 46732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 46728,
                          "name": "remotes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46656,
                          "src": "2105:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$",
                            "typeString": "mapping(uint32 => bytes32)"
                          }
                        },
                        "id": 46730,
                        "indexExpression": {
                          "id": 46729,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46721,
                          "src": "2113:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2105:16:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 46731,
                        "name": "_router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46723,
                        "src": "2125:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "2105:27:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 46738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 46733,
                        "name": "_router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46723,
                        "src": "2136:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 46736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2155:1:79",
                            "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": 46735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2147:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 46734,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "2147:7:79",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 46737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2147:10:79",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "2136:21:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2105:52:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 46727,
                  "id": 46740,
                  "nodeType": "Return",
                  "src": "2098:59:79"
                }
              ]
            },
            "documentation": {
              "id": 46719,
              "nodeType": "StructuredDocumentation",
              "src": "1723:245:79",
              "text": " @notice Return true if the given domain / router is the address of a remote xApp Router\n @param _domain The domain of the potential remote xApp Router\n @param _router The address of the potential remote xApp Router"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isRemoteRouter",
            "parameters": {
              "id": 46724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46721,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 46742,
                  "src": "1998:14:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46720,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1998:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46723,
                  "mutability": "mutable",
                  "name": "_router",
                  "nodeType": "VariableDeclaration",
                  "scope": 46742,
                  "src": "2014:15:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 46722,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2014:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1997:33:79"
            },
            "returnParameters": {
              "id": 46727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46726,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 46742,
                  "src": "2078:4:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 46725,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2078:4:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2077:6:79"
            },
            "scope": 46768,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 46767,
            "nodeType": "FunctionDefinition",
            "src": "2433:203:79",
            "body": {
              "id": 46766,
              "nodeType": "Block",
              "src": "2542:94:79",
              "statements": [
                {
                  "expression": {
                    "id": 46754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 46750,
                      "name": "_remote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46748,
                      "src": "2552:7:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 46751,
                        "name": "remotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46656,
                        "src": "2562:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$",
                          "typeString": "mapping(uint32 => bytes32)"
                        }
                      },
                      "id": 46753,
                      "indexExpression": {
                        "id": 46752,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46745,
                        "src": "2570:7:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2562:16:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2552:26:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 46755,
                  "nodeType": "ExpressionStatement",
                  "src": "2552:26:79"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 46762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 46757,
                          "name": "_remote",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46748,
                          "src": "2596:7:79",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 46760,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2615:1:79",
                              "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": 46759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2607:7:79",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 46758,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "2607:7:79",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 46761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2607:10:79",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2596:21:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172656d6f7465",
                        "id": 46763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2619:9:79",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        },
                        "value": "!remote"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        }
                      ],
                      "id": 46756,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2588:7:79",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 46764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2588:41:79",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 46765,
                  "nodeType": "ExpressionStatement",
                  "src": "2588:41:79"
                }
              ]
            },
            "documentation": {
              "id": 46743,
              "nodeType": "StructuredDocumentation",
              "src": "2170:258:79",
              "text": " @notice Assert that the given domain has a xApp Router registered and return its address\n @param _domain The domain of the chain for which to get the xApp Router\n @return _remote The address of the remote xApp Router on _domain"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mustHaveRemote",
            "parameters": {
              "id": 46746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46745,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 46767,
                  "src": "2458:14:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 46744,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2458:6:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2457:16:79"
            },
            "returnParameters": {
              "id": 46749,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46748,
                  "mutability": "mutable",
                  "name": "_remote",
                  "nodeType": "VariableDeclaration",
                  "scope": 46767,
                  "src": "2521:15:79",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 46747,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2521:7:79",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2520:17:79"
            },
            "scope": 46768,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 46649,
              "name": "XAppConnectionClient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46866,
              "src": "360:20:79",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_XAppConnectionClient_$46866",
                "typeString": "contract XAppConnectionClient"
              }
            },
            "id": 46650,
            "nodeType": "InheritanceSpecifier",
            "src": "360:20:79"
          },
          {
            "baseName": {
              "id": 46651,
              "name": "IMessageRecipient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45034,
              "src": "382:17:79",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IMessageRecipient_$45034",
                "typeString": "contract IMessageRecipient"
              }
            },
            "id": 46652,
            "nodeType": "InheritanceSpecifier",
            "src": "382:17:79"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          45034,
          46866
        ],
        "contractKind": "contract",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          46768,
          45034,
          46866,
          23168,
          25131,
          23676
        ],
        "name": "Router",
        "scope": 46769
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 79
}