{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MockAcctCalled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "toDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "toId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "fastLiquidityEnabled",
          "type": "bool"
        }
      ],
      "name": "Send",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_SCRIPT",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "remoteAddress",
          "type": "bytes32"
        }
      ],
      "name": "createRemoteToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initializeContracts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_dustAmmountIs006",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_exitBridgeOnly",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_giveLocalUnaffected",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_handleHookTransferRevertsIfCallFailsMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_handleHookTransferRevertsIfCallFailsNoMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_handleHookTransferSucceeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_isAffectedAsset",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_sendFailZeroRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_sendLocalTokenDisabled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_sendLocalTokenFailApprove",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_sendRemoteSuccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_takeTokensLocalFailZeroAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_takeTokensLocalSuccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_takeTokensRemoteSuccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vm",
      "outputs": [
        {
          "internalType": "contract Vm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040526000805462ff00001960ff19909116600117166201000017905534801561002a57600080fd5b5062012b68806200003c6000396000f3fe60806040523480156200001157600080fd5b50600436106200019c5760003560e01c806380250bb611620000ed578063dd0329401162000099578063f8ccbf47116200006f578063f8ccbf4714620002b6578063fa7626d414620002c0578063fdd276a814620002ca576200019c565b8063dd0329401462000298578063e4273f0c14620002a2578063f82821c914620002ac576200019c565b8063ba414fa611620000cf578063ba414fa61462000266578063d1f0b7e01462000284578063d5677963146200028e576200019c565b806380250bb61462000252578063b45036f7146200025c576200019c565b8063302dffbd116200014d5780634d56de54116200012f5780634d56de5414620002345780635af8d62e146200023e5780636def07271462000248576200019c565b8063302dffbd14620002205780633a768463146200022a576200019c565b80630f8c829b11620001835780630f8c829b146200020257806318bab5b7146200020c5780632c02f67a1462000216576200019c565b8063055c21e914620001a15780630a9254e414620001f6575b600080fd5b620001cd60048036036040811015620001b957600080fd5b5063ffffffff8135169060200135620002d4565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b62000200620006a5565b005b62000200620008d0565b6200020062000e72565b6200020062000ff2565b62000200620014f6565b620001cd620015a2565b62000200620015ba565b6200020062001a22565b6200020062001caa565b62000200620022df565b620002006200244e565b6200027062002742565b604080519115158252519081900360200190f35b6200020062002980565b6200020062002ca5565b6200020062002ed8565b62000200620033b2565b6200020062003517565b6200027062003870565b620002706200387f565b6200020062003888565b601354604080517f9d2f254f00000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691639d2f254f9160448082019260209290919082900301818787803b1580156200035957600080fd5b505af11580156200036e573d6000803e3d6000fd5b505050506040513d60208110156200038557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192508291620004469173ffffffffffffffffffffffffffffffffffffffff841691638da5cb5b91600480820192602092909190829003018186803b158015620003f957600080fd5b505afa1580156200040e573d6000803e3d6000fd5b505050506040513d60208110156200042557600080fd5b5051600f5473ffffffffffffffffffffffffffffffffffffffff1662003e0a565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166306447d568273ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d257600080fd5b505afa158015620004e7573d6000803e3d6000fd5b505050506040513d6020811015620004fe57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b1580156200056c57600080fd5b505af115801562000581573d6000803e3d6000fd5b5050600a54600b54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092525191851693506340c10f19925060448082019260009290919082900301818387803b1580156200060457600080fd5b505af115801562000619573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b1580156200068357600080fd5b505af115801562000698573d6000803e3d6000fd5b5093979650505050505050565b620006af62003f8a565b600a54601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa18649000000000000000000000000000000000000000000000000000000008152610be0600482015290516200079f91737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200076b57600080fd5b505af115801562000780573d6000803e3d6000fd5b505050506040513d60208110156200079757600080fd5b5051620047d9565b601955600a54601a8054600d5463ffffffff9081167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909216740100000000000000000000000000000000000000009094041664010000000002929092177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016919091179055604051620008339062004b68565b604051809103906000f08015801562000850573d6000803e3d6000fd5b50601b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601654601a80547fffffff0000000000000000000000000000000000000000ffffffffffffffffff1691909216690100000000000000000002179055565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526103e8602482018190529151919360219316916340c10f199160448082019260009290919082900301818387803b1580156200095557600080fd5b505af11580156200096a573d6000803e3d6000fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d94506381bad6f3935060a4808301939282900301818387803b15801562000a1157600080fd5b505af115801562000a26573d6000803e3d6000fd5b5050600f5460408051868152905173ffffffffffffffffffffffffffffffffffffffff80871695509290921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3600f54601554604080517f044dc0d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810186905284831660448201529051919092169163044dc0d791606480830192600092919082900301818387803b15801562000b0657600080fd5b505af115801562000b1b573d6000803e3d6000fd5b505050506000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562000b8b57600080fd5b505afa15801562000ba0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562000bc757600080fd5b50905060005b600e81101562000e6c5760008282600e811062000be657fe5b602002015190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166381bad6f360018060006001600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fb3ccc56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ca257600080fd5b505afa15801562000cb7573d6000803e3d6000fd5b505050506040513d602081101562000cce57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681529515156004870152931515602486015291151560448501521515606484015273ffffffffffffffffffffffffffffffffffffffff1660848301525160a480830192600092919082900301818387803b15801562000d5957600080fd5b505af115801562000d6e573d6000803e3d6000fd5b505060408051888152905173ffffffffffffffffffffffffffffffffffffffff8089169450851692507fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf3319181900360200190a3600f54604080517f044dc0d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820189905287811660448301529151919092169163044dc0d791606480830192600092919082900301818387803b15801562000e4557600080fd5b505af115801562000e5a573d6000803e3d6000fd5b50506001909301925062000bcd915050565b50505050565b6000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562000ede57600080fd5b505afa15801562000ef3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562000f1a57600080fd5b50905060005b600e81101562000fee57600d54640100000000900473ffffffffffffffffffffffffffffffffffffffff16636c2676338383600e811062000f5d57fe5b60200201516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562000fad57600080fd5b505afa15801562000fc2573d6000803e3d6000fd5b505050506040513d602081101562000fd957600080fd5b505162000fe557600080fd5b60010162000f20565b5050565b601b54600090620010199073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f736466000000000000000000000000000000000000000000000000000000000060006200104d61beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b158015620010ce57600080fd5b505af1158015620010e3573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f73646664736600000000000000000000000000000000000000000000000000008152509050600060058686868686604051602001808760068111156200113e57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b60208310620011a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200116a565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a50607b99509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062001273935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b6040805160e09390931b7fffffffff000000000000000000000000000000000000000000000000000000001660208085019190915260248085019390935281518085039093018352604484018083527ff28dceb30000000000000000000000000000000000000000000000000000000090526048840152600560688401527f6e6f706521000000000000000000000000000000000000000000000000000000608884015251909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb39160a880830192600092919082900301818387803b1580156200135857600080fd5b505af11580156200136d573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e280bc7e848484886040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156200141d57818101518382015260200162001403565b50505050905090810190601f1680156200144b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156200148057818101518382015260200162001466565b50505050905090810190601f168015620014ae5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015620014d257600080fd5b505af1158015620014e7573d6000803e3d6000fd5b50505050505050505050505050565b600f54604080517f97f641ab0000000000000000000000000000000000000000000000000000000081529051620015a09273ffffffffffffffffffffffffffffffffffffffff16916397f641ab916004808301926020929190829003018186803b1580156200156457600080fd5b505afa15801562001579573d6000803e3d6000fd5b505050506040513d60208110156200159057600080fd5b505166d529ae9e860000620047f2565b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b1580156200164357600080fd5b505af115801562001658573d6000803e3d6000fd5b5050601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101879052905191909216935063095ea7b3925060448083019260209291908290030181600087803b158015620016dc57600080fd5b505af1158015620016f1573d6000803e3d6000fd5b505050506040513d60208110156200170857600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c656400000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b158015620017a457600080fd5b505af1158015620017b9573d6000803e3d6000fd5b5050600f54601554601a54601954604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201526024810189905263ffffffff8416604482015260648101929092526801000000000000000090920460ff1615156084820152905191909216935063a9bd1226925060a480830192600092919082900301818387803b1580156200186d57600080fd5b505af115801562001882573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c656400000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156200192057600080fd5b505af115801562001935573d6000803e3d6000fd5b5050600f54601554601a54601954604080517fbc7dbab300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201526024810189905263ffffffff9093166044840152606483019190915260a06084830152600660a48301527f307831323334000000000000000000000000000000000000000000000000000060c48301525191909216935063bc7dbab3925060e480830192600092919082900301818387803b15801562001a0657600080fd5b505af115801562001a1b573d6000803e3d6000fd5b5050505050565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b15801562001aab57600080fd5b505af115801562001ac0573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152602060048201908152602860248301819052737109709ecfa91a80626ff3989d68f67f5b1dd12d945063f28dceb393509091829160449091019062012b0f8239604001915050600060405180830381600087803b15801562001b4957600080fd5b505af115801562001b5e573d6000803e3d6000fd5b5050600f54601554600a54601954601a54604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9586166004820152602481018a90527401000000000000000000000000000000000000000090940463ffffffff166044850152606484019290925268010000000000000000900460ff16151560848301525191909216935063a9bd1226925060a480830192600092919082900301818387803b15801562001c2b57600080fd5b505af115801562001c40573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b15801562001a0657600080fd5b601a54601854604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051606493600093690100000000000000000090910416916370a08231916024808301926020929190829003018186803b15801562001d3257600080fd5b505afa15801562001d47573d6000803e3d6000fd5b505050506040513d602081101562001d5e57600080fd5b5051601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251919250737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d94506381bad6f3935060a4808301939282900301818387803b15801562001ea557600080fd5b505af115801562001eba573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801562001f9557600080fd5b505af115801562001faa573d6000803e3d6000fd5b505050506040513d602081101562001fc157600080fd5b5050601a54604080517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526000604483018190526064830191909152690100000000000000000090930473ffffffffffffffffffffffffffffffffffffffff1660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a4808201939182900301818387803b1580156200207257600080fd5b505af115801562002087573d6000803e3d6000fd5b50506018546040805186815290516000945073ffffffffffffffffffffffffffffffffffffffff9290921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3600f54601a54604080517fe4ad9a18000000000000000000000000000000000000000000000000000000008152690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff908116600484015260248301869052815193169263e4ad9a189260448082019392918290030181600087803b1580156200216857600080fd5b505af11580156200217d573d6000803e3d6000fd5b505050506040513d60408110156200219457600080fd5b5050601a54601854604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160009369010000000000000000009004909216916370a0823191602480820192602092909190829003018186803b1580156200221d57600080fd5b505afa15801562002232573d6000803e3d6000fd5b505050506040513d60208110156200224957600080fd5b505190506200225b81848403620047f2565b604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d916390c5013b91600480830192600092919082900301818387803b158015620022c157600080fd5b505af1158015620022d6573d6000803e3d6000fd5b50505050505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f217265636970000000000000000000000000000000000000000000000000000060448201529051600091606491737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391818501918691908190038601818387803b1580156200237c57600080fd5b505af115801562002391573d6000803e3d6000fd5b5050600f54601554601a54604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810188905263ffffffff909216604483015260648201889052600060848301819052905192909316945063a9bd1226935060a480820193929182900301818387803b1580156200243157600080fd5b505af115801562002446573d6000803e3d6000fd5b505050505050565b601354601254601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015251919092169163485cc95591604480830192600092919082900301818387803b158015620024d057600080fd5b505af1158015620024e5573d6000803e3d6000fd5b5050600f54601354601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301525191909216935063485cc9559250604480830192600092919082900301818387803b1580156200256b57600080fd5b505af115801562002580573d6000803e3d6000fd5b5050601354600f54604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191909216935063f2fde38b9250602480830192600092919082900301818387803b158015620025fc57600080fd5b505af115801562002611573d6000803e3d6000fd5b5050601054600e54604080517f6ef0f37f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169350636ef0f37f9250602480830192600092919082900301818387803b1580156200268d57600080fd5b505af1158015620026a2573d6000803e3d6000fd5b5050600f54600d54600c54604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015260248301919091525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156200272d57600080fd5b505af115801562000e6c573d6000803e3d6000fd5b60008054610100900460ff1615620027665750600054610100900460ff166200297d565b6000620027726200491c565b156200297a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b602083106200286d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200282e565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620028f157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620028b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002955576040519150601f19603f3d011682016040523d82523d6000602084013e6200295a565b606091505b509150508080602001905160208110156200297457600080fd5b50519150505b90505b90565b601b54600090620029a79073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f73646600000000000000000000000000000000000000000000000000000000006000620029db61beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b15801562002a5c57600080fd5b505af115801562002a71573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f736466647366000000000000000000000000000000000000000000000000000081525090506000600586868686866040516020018087600681111562002acc57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831062002b3757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002af8565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a5061025899509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062002c02935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b604051602001808363ffffffff1660e01b81526004018281526020019250505060405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200135857600080fd5b6000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562002d1157600080fd5b505afa15801562002d26573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562002d4d57600080fd5b50905060005b600e81101562000fee57604080517ff48448140000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f484481491600480830192600092919082900301818387803b15801562002dc357600080fd5b505af115801562002dd8573d6000803e3d6000fd5b5050600f5473ffffffffffffffffffffffffffffffffffffffff16915063a9bd122690508383600e811062002e0957fe5b6020020151601a546019546040805160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90941660048501526001602485015263ffffffff8316604485015260648401919091526801000000000000000090910460ff16151560848301525160a480830192600092919082900301818387803b15801562002eb257600080fd5b505af115801562002ec7573d6000803e3d6000fd5b50506001909201915062002d539050565b601b5460009062002eff9073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f7364660000000000000000000000000000000000000000000000000000000000600062002f3361beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b15801562002fb457600080fd5b505af115801562002fc9573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f73646664736600000000000000000000000000000000000000000000000000008152509050600060058686868686604051602001808760068111156200302457fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b602083106200308f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162003050565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a50600999509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062003159935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b604051602001808363ffffffff1660e01b8152600401828152602001925050506040516020818303038152906040529050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e280bc7e848484886040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015620032365781810151838201526020016200321c565b50505050905090810190601f168015620032645780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620032995781810151838201526020016200327f565b50505050905090810190601f168015620032c75780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015620032eb57600080fd5b505af115801562003300573d6000803e3d6000fd5b50505050620033a7601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8a8fd6d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200337157600080fd5b505afa15801562003386573d6000803e3d6000fd5b505050506040513d60208110156200339d57600080fd5b5051607b620047f2565b505050505050505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e7400000000000000000000000000000000000000000000000000000060448201529051600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480820192869290919082900301818387803b1580156200344f57600080fd5b505af115801562003464573d6000803e3d6000fd5b5050600f54601554604080517fe4ad9a1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101879052815192909316945063e4ad9a1893506044808401939192918290030181600087803b158015620034e657600080fd5b505af1158015620034fb573d6000803e3d6000fd5b505050506040513d60408110156200351257600080fd5b505050565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b158015620035a057600080fd5b505af1158015620035b5573d6000803e3d6000fd5b5050601a54600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810187905290516901000000000000000000909304909116935063095ea7b392506044808201926020929091908290030181600087803b1580156200364757600080fd5b505af11580156200365c573d6000803e3d6000fd5b505050506040513d60208110156200367357600080fd5b5050600f54604080517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909216608483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916381bad6f39160a480830192600092919082900301818387803b1580156200371657600080fd5b505af11580156200372b573d6000803e3d6000fd5b5050601a54601854601954604080519182526020820187905260ff680100000000000000008504161515828201525163ffffffff8416955073ffffffffffffffffffffffffffffffffffffffff92831694506901000000000000000000909304909116917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf9181900360600190a4600f54601a54601954604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff69010000000000000000008504811660048301526024820187905263ffffffff8516604483015260648201939093526801000000000000000090930460ff16151560848401525192169163a9bd12269160a48082019260009290919082900301818387803b15801562001c2b57600080fd5b60005462010000900460ff1681565b60005460ff1681565b601554600f54604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160649360009316916370a08231916024808301926020929190829003018186803b1580156200390257600080fd5b505afa15801562003917573d6000803e3d6000fd5b505050506040513d60208110156200392e57600080fd5b5051601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051929350737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a48084019391929182900301818387803b158015620039d857600080fd5b505af1158015620039ed573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d5691602480830192600092919082900301818387803b15801562003acd57600080fd5b505af115801562003ae2573d6000803e3d6000fd5b5050601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101889052905191909216935063095ea7b3925060448083019260209291908290030181600087803b15801562003b6657600080fd5b505af115801562003b7b573d6000803e3d6000fd5b505050506040513d602081101562003b9257600080fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a4808201939182900301818387803b15801562003c3757600080fd5b505af115801562003c4c573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600f54601554604080517fe4ad9a1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481018690528151929093169263e4ad9a1892604480830193928290030181600087803b15801562003d2357600080fd5b505af115801562003d38573d6000803e3d6000fd5b505050506040513d604081101562003d4f57600080fd5b5050601554600f54604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160009392909216916370a0823191602480820192602092909190829003018186803b15801562003dcc57600080fd5b505afa15801562003de1573d6000803e3d6000fd5b505050506040513d602081101562003df857600080fd5b505190506200225b81838501620047f2565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000fee577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602581526020018062012b376025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a162000fee62004937565b6101a46008819055604080517fffa18649000000000000000000000000000000000000000000000000000000008152600481019290925251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200400057600080fd5b505af115801562004015573d6000803e3d6000fd5b505050506040513d60208110156200402c57600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815261245960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b158015620040e157600080fd5b505af1158015620040f6573d6000803e3d6000fd5b505050506040513d60208110156200410d57600080fd5b5051600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa186490000000000000000000000000000000000000000000000000000000081526201833360048201529051620041c991737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200076b57600080fd5b600c55612710600b55604051620041e09062004b76565b604051809103906000f080158015620041fd573d6000803e3d6000fd5b50600d80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff93841602179055600a54600b54604051919092169190620042609062004b84565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f0801580156200430f573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600a80547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167505dc0000000000000000000000000000000000000000179055600d8054610bb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055620043d061beef620047d9565b601755600a546040517401000000000000000000000000000000000000000090910463ffffffff1690620044049062004b92565b63ffffffff909116815260405190819003602001906000f0801580156200442f573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d54604051640100000000909104909116906200448f9062004ba0565b73ffffffffffffffffffffffffffffffffffffffff909116815260405190819003602001906000f080158015620044ca573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200451e9062004bae565b604051809103906000f0801580156200453b573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200458f9062004bbc565b604051809103906000f080158015620045ac573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620046009062004bca565b604051809103906000f0801580156200461d573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620046719062004bd8565b604051809103906000f0801580156200468e573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055601154604051918316921690620046e99062004be6565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f0801580156200472a573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556200477a6200244e565b600d54601754620047929163ffffffff1690620002d4565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff1690565b80821462000fee577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602281526020018062012aed6022913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162000fee62004937565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b620049416200491c565b1562004b3a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b6020831062004a4857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162004a09565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b6020831062004acc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162004a8d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462004b30576040519150601f19603f3d011682016040523d82523d6000602084013e62004b35565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61020e8062004bf583390190565b6103cd8062004e0383390190565b61148080620051d083390190565b6104db806200665083390190565b6152dd8062006b2b83390190565b612783806200be0883390190565b611581806200e58b83390190565b61070d806200fb0c83390190565b612583806201021983390190565b610351806201279c8339019056fe608060405234801561001057600080fd5b506101ee806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063048494fe1461003b578063f8a8fd6d14610128575b600080fd5b610126600480360360e081101561005157600080fd5b63ffffffff823581169260208101359260408201359092169160608201359173ffffffffffffffffffffffffffffffffffffffff6080820135169160a0820135919081019060e0810160c08201356401000000008111156100b157600080fd5b8201836020820111156100c357600080fd5b803590602001918460018302840111640100000000831117156100e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610142945050505050565b005b6101306101db565b60408051918252519081900360200190f35b6101f48763ffffffff16111561015757600080fd5b600a8763ffffffff1611156101cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f6e6f706521000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b607b60005550505050505050565b6000548156fea164736f6c6343000706000a608060405234801561001057600080fd5b506103ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063172a93fb146100465780636c2676331461008b5780637013ca26146100d2575b600080fd5b6100896004803603606081101561005c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610113565b005b6100be600480360360208110156100a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661017d565b604080519115158252519081900360200190f35b6100da6101f9565b60405180826101c080838360005b838110156101005781810151838201526020016100e8565b5050505090500191505060405180910390f35b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf331836040518082815260200191505060405180910390a3505050565b6000806101886101f9565b905060005b600e8110156101ed578181600e81106101a257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156101e5576001925050506101f4565b60010161018d565b5060009150505b919050565b610201610381565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b604051806101c00160405280600e90602082028036833750919291505056fea164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a608060405234801561001057600080fd5b506040516104db3803806104db8339818101604052602081101561003357600080fd5b50516000805463ffffffff90921663ffffffff1990921691909117905561047c8061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a60a060405234801561001057600080fd5b50604051620052dd380380620052dd8339818101604052602081101561003557600080fd5b5051606081901b6001600160601b0319166080526001600160a01b031661525a6200008360003980610d035280610e815280610f5f52806111555280611ec35280611f7b525061525a6000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a608060405234801561001057600080fd5b50612763806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001c05760003560e01c80638da5cb5b11620000f9578063ccf5a77c1162000099578063ec694a14116200006f578063ec694a1414620005d1578063f153768614620006e1578063f2fde38b146200071757620001c0565b8063ccf5a77c1462000559578063d82d05311462000563578063dc9685a714620005a557620001c0565b8063b9730eaf11620000cf578063b9730eaf1462000491578063c2561f6514620004c7578063c86415cb146200050f57620001c0565b80638da5cb5b146200042f5780639d2f254f1462000439578063b869d89a146200046557620001c0565b80633339df961162000165578063589b3c64116200013b578063589b3c6414620003b1578063715018a614620003dd57806380350c2214620003e757620001c0565b80633339df96146200033357806341bdc8b5146200033d578063485cc955146200037357620001c0565b80631ecf6f9f116200019b5780631ecf6f9f146200029d57806328b1aea014620002bd5780632c3da59c146200030757620001c0565b806303e418c214620001c55780630e71e251146200021b5780630fdeeba9146200027a575b600080fd5b620001fb60048036036020811015620001dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200074d565b6040805163ffffffff909316835260208301919091528051918290030190f35b62000251600480360360208110156200023357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200076f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620002846200083f565b6040805163ffffffff9092168252519081900360200190f35b6200025160048036036020811015620002b557600080fd5b503562000850565b6200030560048036036060811015620002d557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000878565b005b62000251600480360360408110156200031f57600080fd5b5063ffffffff813516906020013562000944565b62000251620009e1565b62000305600480360360208110156200035557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620009fd565b62000305600480360360408110156200038b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351662000af1565b6200025160048036036040811015620003c957600080fd5b5063ffffffff813516906020013562000c59565b6200030562000c98565b6200030560048036036060811015620003ff57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000932565b6200025162000d47565b62000251600480360360408110156200045157600080fd5b5063ffffffff813516906020013562000d63565b62000251600480360360408110156200047d57600080fd5b5063ffffffff813516906020013562000d71565b620001fb60048036036020811015620004a957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000e56565b6200030560048036036060811015620004df57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000ea1565b62000545600480360360208110156200052757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000eae565b604080519115158252519081900360200190f35b6200025162000ef4565b62000251600480360360408110156200057b57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000f10565b6200025160048036036040811015620005bd57600080fd5b5063ffffffff813516906020013562000f28565b620005fd60048036036040811015620005e957600080fd5b5063ffffffff813516906020013562000f96565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200064057818101518382015260200162000626565b50505050905090810190601f1680156200066e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006a357818101518382015260200162000689565b50505050905090810190601f168015620006d15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b620001fb60048036036020811015620006f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000fb0565b62000305600480360360208110156200072f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662001031565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252906200082457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620008388160000151826020015162000f28565b9392505050565b60006200084b620011da565b905090565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b62000882620011e6565b73ffffffffffffffffffffffffffffffffffffffff16620008a262000d47565b73ffffffffffffffffffffffffffffffffffffffff16146200092557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000932838383620011ea565b6200093f838383620012bc565b505050565b60008062000953848462000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b62000a07620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000a2762000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff168062000b0d575062000b0d620013d6565b8062000b1c575060005460ff16155b62000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562000bda57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905562000c2582620013e9565b80156200093f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000c65620011da565b63ffffffff168363ffffffff16141562000c8c5762000c848262001550565b9050620009db565b620009d8838362000f28565b62000ca2620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000cc262000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d8838362001553565b600062000d7d620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000d9d62000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000e2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000e2c838362000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009db57620009d8838362001553565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b6200093f838383620011ea565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000ee95750600062000eef565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b6000620009d88362000f22846200187e565b62000c59565b60008062000f37848462001897565b9050600062000f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60608062000fa5848462001933565b915091509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925282916200101e5762001009620011da565b925062001016846200187e565b91506200102b565b8051602082015190935091505b50915091565b6200103b620011e6565b73ffffffffffffffffffffffffffffffffffffffff166200105b62000d47565b73ffffffffffffffffffffffffffffffffffffffff1614620010de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166200114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620027036026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006200084b62001a13565b3390565b63ffffffff83166200125d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff81166200133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006200134d848462001897565b905060006200137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b6000620013e33062001ab2565b15905090565b600054610100900460ff168062001405575062001405620013d6565b8062001414575060005460ff16155b6200146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff16158015620014d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200151c62001ab8565b80156200154c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff16906200157e9062002192565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f080158015620015c8573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200161457600080fd5b505af115801562001629573d6000803e3d6000fd5b505050506000806200163c858562001933565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015620016b85781810151838201526020016200169e565b50505050905090810190601f168015620016e65780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200171b57818101518382015260200162001701565b50505050905090810190601f168015620017495780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200176c57600080fd5b505af115801562001781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b620017ab62000d47565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620017f857600080fd5b505af11580156200180d573d6000803e3d6000fd5b505050506200181e858585620012bc565b6200182b858585620011ea565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529062001be8565b600080620018fe8362001c0e565b6bffffffffffffffffffffffff16905060006200191b8462001c22565b6bffffffffffffffffffffffff169091209392505050565b6060806000620019438462001c36565b915050620019518562001d0e565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801562001a7f57600080fd5b505afa15801562001a94573d6000803e3d6000fd5b505050506040513d602081101562001aab57600080fd5b5051905090565b3b151590565b600054610100900460ff168062001ad4575062001ad4620013d6565b8062001ae3575060005460ff16155b62001b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001ba157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b62001bab62001d70565b62001bb562001e8a565b801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b81516000906020840162001c0564ffffffffff8516828462002024565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600080601f5b600f8160ff16111562001ca35760ff600882021684901c62001c5e8162002081565b61ffff16841793508160ff1660101462001c7a57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c3c565b50600f5b60ff8160ff1610156200102b5760ff600882021684901c62001cc98162002081565b61ffff16831792508160ff1660001462001ce557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001ca7565b60006030815b600a8160ff16101562001d695760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d5d57fe5b04935060010162001d14565b5050919050565b600054610100900460ff168062001d8c575062001d8c620013d6565b8062001d9b575060005460ff16155b62001df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001ea6575062001ea6620013d6565b8062001eb5575060005460ff16155b62001f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001f7357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001f7f620011e6565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080620020338484620020b5565b905060405181111562002044575060005b8062002074577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505062000838565b62001c0585858562002128565b60006200209560048360ff16901c6200213b565b60ff161760081b62ffff0016620020ac826200213b565b60ff1617919050565b81810182811015620009db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f841691829081106200218357fe5b016020015160f81c9392505050565b61056280620021a18339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6106908061007d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9608052610120604052600160e052603160f81b610100527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a05261190160f01b60c05234801561007057600080fd5b5060805160a05160c05160f01c6124de6100a5600039806110fa52508061142f525080610d84528061109652506124de6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a60a060405234801561001057600080fd5b506040516103513803806103518339818101604052604081101561003357600080fd5b5080516020909101516100458261005b565b60601b6001600160601b0319166080525061015b565b6000546001600160a01b03828116911614156100a9576040805162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b604482015290519081900360640190fd5b6100bc8161015560201b6101c71760201c565b61010d576040805162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b151590565b60805160601c6101da61017760003980601c52506101da6000f3fe60806040523373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461004d5760005460005260206000f35b6000356100598161005c565b50005b60005473ffffffffffffffffffffffffffffffffffffffff828116911614156100e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2175706772616465000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6100ef816101c7565b61015a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b15159056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e745d45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "398:9991:48:-:0;;;1572:26:0;;;-1:-1:-1;;;;1572:26:0;;;1594:4;1572:26;170:28:1;;;;;398:9991:48;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040523480156200001157600080fd5b50600436106200019c5760003560e01c806380250bb611620000ed578063dd0329401162000099578063f8ccbf47116200006f578063f8ccbf4714620002b6578063fa7626d414620002c0578063fdd276a814620002ca576200019c565b8063dd0329401462000298578063e4273f0c14620002a2578063f82821c914620002ac576200019c565b8063ba414fa611620000cf578063ba414fa61462000266578063d1f0b7e01462000284578063d5677963146200028e576200019c565b806380250bb61462000252578063b45036f7146200025c576200019c565b8063302dffbd116200014d5780634d56de54116200012f5780634d56de5414620002345780635af8d62e146200023e5780636def07271462000248576200019c565b8063302dffbd14620002205780633a768463146200022a576200019c565b80630f8c829b11620001835780630f8c829b146200020257806318bab5b7146200020c5780632c02f67a1462000216576200019c565b8063055c21e914620001a15780630a9254e414620001f6575b600080fd5b620001cd60048036036040811015620001b957600080fd5b5063ffffffff8135169060200135620002d4565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b62000200620006a5565b005b62000200620008d0565b6200020062000e72565b6200020062000ff2565b62000200620014f6565b620001cd620015a2565b62000200620015ba565b6200020062001a22565b6200020062001caa565b62000200620022df565b620002006200244e565b6200027062002742565b604080519115158252519081900360200190f35b6200020062002980565b6200020062002ca5565b6200020062002ed8565b62000200620033b2565b6200020062003517565b6200027062003870565b620002706200387f565b6200020062003888565b601354604080517f9d2f254f00000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691639d2f254f9160448082019260209290919082900301818787803b1580156200035957600080fd5b505af11580156200036e573d6000803e3d6000fd5b505050506040513d60208110156200038557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192508291620004469173ffffffffffffffffffffffffffffffffffffffff841691638da5cb5b91600480820192602092909190829003018186803b158015620003f957600080fd5b505afa1580156200040e573d6000803e3d6000fd5b505050506040513d60208110156200042557600080fd5b5051600f5473ffffffffffffffffffffffffffffffffffffffff1662003e0a565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166306447d568273ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d257600080fd5b505afa158015620004e7573d6000803e3d6000fd5b505050506040513d6020811015620004fe57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b1580156200056c57600080fd5b505af115801562000581573d6000803e3d6000fd5b5050600a54600b54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092525191851693506340c10f19925060448082019260009290919082900301818387803b1580156200060457600080fd5b505af115801562000619573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b1580156200068357600080fd5b505af115801562000698573d6000803e3d6000fd5b5093979650505050505050565b620006af62003f8a565b600a54601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa18649000000000000000000000000000000000000000000000000000000008152610be0600482015290516200079f91737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200076b57600080fd5b505af115801562000780573d6000803e3d6000fd5b505050506040513d60208110156200079757600080fd5b5051620047d9565b601955600a54601a8054600d5463ffffffff9081167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909216740100000000000000000000000000000000000000009094041664010000000002929092177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016919091179055604051620008339062004b68565b604051809103906000f08015801562000850573d6000803e3d6000fd5b50601b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601654601a80547fffffff0000000000000000000000000000000000000000ffffffffffffffffff1691909216690100000000000000000002179055565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526103e8602482018190529151919360219316916340c10f199160448082019260009290919082900301818387803b1580156200095557600080fd5b505af11580156200096a573d6000803e3d6000fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d94506381bad6f3935060a4808301939282900301818387803b15801562000a1157600080fd5b505af115801562000a26573d6000803e3d6000fd5b5050600f5460408051868152905173ffffffffffffffffffffffffffffffffffffffff80871695509290921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3600f54601554604080517f044dc0d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810186905284831660448201529051919092169163044dc0d791606480830192600092919082900301818387803b15801562000b0657600080fd5b505af115801562000b1b573d6000803e3d6000fd5b505050506000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562000b8b57600080fd5b505afa15801562000ba0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562000bc757600080fd5b50905060005b600e81101562000e6c5760008282600e811062000be657fe5b602002015190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166381bad6f360018060006001600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fb3ccc56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ca257600080fd5b505afa15801562000cb7573d6000803e3d6000fd5b505050506040513d602081101562000cce57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681529515156004870152931515602486015291151560448501521515606484015273ffffffffffffffffffffffffffffffffffffffff1660848301525160a480830192600092919082900301818387803b15801562000d5957600080fd5b505af115801562000d6e573d6000803e3d6000fd5b505060408051888152905173ffffffffffffffffffffffffffffffffffffffff8089169450851692507fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf3319181900360200190a3600f54604080517f044dc0d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820189905287811660448301529151919092169163044dc0d791606480830192600092919082900301818387803b15801562000e4557600080fd5b505af115801562000e5a573d6000803e3d6000fd5b50506001909301925062000bcd915050565b50505050565b6000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562000ede57600080fd5b505afa15801562000ef3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562000f1a57600080fd5b50905060005b600e81101562000fee57600d54640100000000900473ffffffffffffffffffffffffffffffffffffffff16636c2676338383600e811062000f5d57fe5b60200201516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562000fad57600080fd5b505afa15801562000fc2573d6000803e3d6000fd5b505050506040513d602081101562000fd957600080fd5b505162000fe557600080fd5b60010162000f20565b5050565b601b54600090620010199073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f736466000000000000000000000000000000000000000000000000000000000060006200104d61beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b158015620010ce57600080fd5b505af1158015620010e3573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f73646664736600000000000000000000000000000000000000000000000000008152509050600060058686868686604051602001808760068111156200113e57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b60208310620011a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200116a565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a50607b99509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062001273935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b6040805160e09390931b7fffffffff000000000000000000000000000000000000000000000000000000001660208085019190915260248085019390935281518085039093018352604484018083527ff28dceb30000000000000000000000000000000000000000000000000000000090526048840152600560688401527f6e6f706521000000000000000000000000000000000000000000000000000000608884015251909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb39160a880830192600092919082900301818387803b1580156200135857600080fd5b505af11580156200136d573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e280bc7e848484886040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156200141d57818101518382015260200162001403565b50505050905090810190601f1680156200144b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156200148057818101518382015260200162001466565b50505050905090810190601f168015620014ae5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015620014d257600080fd5b505af1158015620014e7573d6000803e3d6000fd5b50505050505050505050505050565b600f54604080517f97f641ab0000000000000000000000000000000000000000000000000000000081529051620015a09273ffffffffffffffffffffffffffffffffffffffff16916397f641ab916004808301926020929190829003018186803b1580156200156457600080fd5b505afa15801562001579573d6000803e3d6000fd5b505050506040513d60208110156200159057600080fd5b505166d529ae9e860000620047f2565b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b1580156200164357600080fd5b505af115801562001658573d6000803e3d6000fd5b5050601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101879052905191909216935063095ea7b3925060448083019260209291908290030181600087803b158015620016dc57600080fd5b505af1158015620016f1573d6000803e3d6000fd5b505050506040513d60208110156200170857600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c656400000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b158015620017a457600080fd5b505af1158015620017b9573d6000803e3d6000fd5b5050600f54601554601a54601954604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201526024810189905263ffffffff8416604482015260648101929092526801000000000000000090920460ff1615156084820152905191909216935063a9bd1226925060a480830192600092919082900301818387803b1580156200186d57600080fd5b505af115801562001882573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c656400000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156200192057600080fd5b505af115801562001935573d6000803e3d6000fd5b5050600f54601554601a54601954604080517fbc7dbab300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201526024810189905263ffffffff9093166044840152606483019190915260a06084830152600660a48301527f307831323334000000000000000000000000000000000000000000000000000060c48301525191909216935063bc7dbab3925060e480830192600092919082900301818387803b15801562001a0657600080fd5b505af115801562001a1b573d6000803e3d6000fd5b5050505050565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b15801562001aab57600080fd5b505af115801562001ac0573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152602060048201908152602860248301819052737109709ecfa91a80626ff3989d68f67f5b1dd12d945063f28dceb393509091829160449091019062012b0f8239604001915050600060405180830381600087803b15801562001b4957600080fd5b505af115801562001b5e573d6000803e3d6000fd5b5050600f54601554600a54601954601a54604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9586166004820152602481018a90527401000000000000000000000000000000000000000090940463ffffffff166044850152606484019290925268010000000000000000900460ff16151560848301525191909216935063a9bd1226925060a480830192600092919082900301818387803b15801562001c2b57600080fd5b505af115801562001c40573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b15801562001a0657600080fd5b601a54601854604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051606493600093690100000000000000000090910416916370a08231916024808301926020929190829003018186803b15801562001d3257600080fd5b505afa15801562001d47573d6000803e3d6000fd5b505050506040513d602081101562001d5e57600080fd5b5051601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251919250737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d94506381bad6f3935060a4808301939282900301818387803b15801562001ea557600080fd5b505af115801562001eba573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b15801562001f9557600080fd5b505af115801562001faa573d6000803e3d6000fd5b505050506040513d602081101562001fc157600080fd5b5050601a54604080517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526000604483018190526064830191909152690100000000000000000090930473ffffffffffffffffffffffffffffffffffffffff1660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a4808201939182900301818387803b1580156200207257600080fd5b505af115801562002087573d6000803e3d6000fd5b50506018546040805186815290516000945073ffffffffffffffffffffffffffffffffffffffff9290921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a3600f54601a54604080517fe4ad9a18000000000000000000000000000000000000000000000000000000008152690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff908116600484015260248301869052815193169263e4ad9a189260448082019392918290030181600087803b1580156200216857600080fd5b505af11580156200217d573d6000803e3d6000fd5b505050506040513d60408110156200219457600080fd5b5050601a54601854604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160009369010000000000000000009004909216916370a0823191602480820192602092909190829003018186803b1580156200221d57600080fd5b505afa15801562002232573d6000803e3d6000fd5b505050506040513d60208110156200224957600080fd5b505190506200225b81848403620047f2565b604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d916390c5013b91600480830192600092919082900301818387803b158015620022c157600080fd5b505af1158015620022d6573d6000803e3d6000fd5b50505050505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f217265636970000000000000000000000000000000000000000000000000000060448201529051600091606491737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391818501918691908190038601818387803b1580156200237c57600080fd5b505af115801562002391573d6000803e3d6000fd5b5050600f54601554601a54604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810188905263ffffffff909216604483015260648201889052600060848301819052905192909316945063a9bd1226935060a480820193929182900301818387803b1580156200243157600080fd5b505af115801562002446573d6000803e3d6000fd5b505050505050565b601354601254601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015251919092169163485cc95591604480830192600092919082900301818387803b158015620024d057600080fd5b505af1158015620024e5573d6000803e3d6000fd5b5050600f54601354601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301525191909216935063485cc9559250604480830192600092919082900301818387803b1580156200256b57600080fd5b505af115801562002580573d6000803e3d6000fd5b5050601354600f54604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191909216935063f2fde38b9250602480830192600092919082900301818387803b158015620025fc57600080fd5b505af115801562002611573d6000803e3d6000fd5b5050601054600e54604080517f6ef0f37f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169350636ef0f37f9250602480830192600092919082900301818387803b1580156200268d57600080fd5b505af1158015620026a2573d6000803e3d6000fd5b5050600f54600d54600c54604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015260248301919091525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156200272d57600080fd5b505af115801562000e6c573d6000803e3d6000fd5b60008054610100900460ff1615620027665750600054610100900460ff166200297d565b6000620027726200491c565b156200297a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b602083106200286d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200282e565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620028f157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620028b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002955576040519150601f19603f3d011682016040523d82523d6000602084013e6200295a565b606091505b509150508080602001905160208110156200297457600080fd5b50519150505b90505b90565b601b54600090620029a79073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f73646600000000000000000000000000000000000000000000000000000000006000620029db61beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b15801562002a5c57600080fd5b505af115801562002a71573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f736466647366000000000000000000000000000000000000000000000000000081525090506000600586868686866040516020018087600681111562002acc57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831062002b3757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002af8565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a5061025899509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062002c02935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b604051602001808363ffffffff1660e01b81526004018281526020019250505060405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200135857600080fd5b6000600d60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b15801562002d1157600080fd5b505afa15801562002d26573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c081101562002d4d57600080fd5b50905060005b600e81101562000fee57604080517ff48448140000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f484481491600480830192600092919082900301818387803b15801562002dc357600080fd5b505af115801562002dd8573d6000803e3d6000fd5b5050600f5473ffffffffffffffffffffffffffffffffffffffff16915063a9bd122690508383600e811062002e0957fe5b6020020151601a546019546040805160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90941660048501526001602485015263ffffffff8316604485015260648401919091526801000000000000000090910460ff16151560848301525160a480830192600092919082900301818387803b15801562002eb257600080fd5b505af115801562002ec7573d6000803e3d6000fd5b50506001909201915062002d539050565b601b5460009062002eff9073ffffffffffffffffffffffffffffffffffffffff16620047d9565b905060647f7364660000000000000000000000000000000000000000000000000000000000600062002f3361beef620047d9565b601554600f54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810188905290519394509116916340c10f199160448082019260009290919082900301818387803b15801562002fb457600080fd5b505af115801562002fc9573d6000803e3d6000fd5b5050505060006040518060400160405280600681526020017f73646664736600000000000000000000000000000000000000000000000000008152509050600060058686868686604051602001808760068111156200302457fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b602083106200308f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162003050565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825290925250600a8054601554929a50600999509097506000965074010000000000000000000000000000000000000000900463ffffffff16945062003159935073ffffffffffffffffffffffffffffffffffffffff169150620047d99050565b604051602001808363ffffffff1660e01b8152600401828152602001925050506040516020818303038152906040529050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e280bc7e848484886040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015620032365781810151838201526020016200321c565b50505050905090810190601f168015620032645780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620032995781810151838201526020016200327f565b50505050905090810190601f168015620032c75780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015620032eb57600080fd5b505af115801562003300573d6000803e3d6000fd5b50505050620033a7601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8a8fd6d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200337157600080fd5b505afa15801562003386573d6000803e3d6000fd5b505050506040513d60208110156200339d57600080fd5b5051607b620047f2565b505050505050505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e7400000000000000000000000000000000000000000000000000000060448201529051600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480820192869290919082900301818387803b1580156200344f57600080fd5b505af115801562003464573d6000803e3d6000fd5b5050600f54601554604080517fe4ad9a1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101879052815192909316945063e4ad9a1893506044808401939192918290030181600087803b158015620034e657600080fd5b505af1158015620034fb573d6000803e3d6000fd5b505050506040513d60408110156200351257600080fd5b505050565b601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251606491737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569160248082019260009290919082900301818387803b158015620035a057600080fd5b505af1158015620035b5573d6000803e3d6000fd5b5050601a54600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810187905290516901000000000000000000909304909116935063095ea7b392506044808201926020929091908290030181600087803b1580156200364757600080fd5b505af11580156200365c573d6000803e3d6000fd5b505050506040513d60208110156200367357600080fd5b5050600f54604080517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909216608483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916381bad6f39160a480830192600092919082900301818387803b1580156200371657600080fd5b505af11580156200372b573d6000803e3d6000fd5b5050601a54601854601954604080519182526020820187905260ff680100000000000000008504161515828201525163ffffffff8416955073ffffffffffffffffffffffffffffffffffffffff92831694506901000000000000000000909304909116917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf9181900360600190a4600f54601a54601954604080517fa9bd122600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff69010000000000000000008504811660048301526024820187905263ffffffff8516604483015260648201939093526801000000000000000090930460ff16151560848401525192169163a9bd12269160a48082019260009290919082900301818387803b15801562001c2b57600080fd5b60005462010000900460ff1681565b60005460ff1681565b601554600f54604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160649360009316916370a08231916024808301926020929190829003018186803b1580156200390257600080fd5b505afa15801562003917573d6000803e3d6000fd5b505050506040513d60208110156200392e57600080fd5b5051601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051929350737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a48084019391929182900301818387803b158015620039d857600080fd5b505af1158015620039ed573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3601854604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d5691602480830192600092919082900301818387803b15801562003acd57600080fd5b505af115801562003ae2573d6000803e3d6000fd5b5050601554600f54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101889052905191909216935063095ea7b3925060448083019260209291908290030181600087803b15801562003b6657600080fd5b505af115801562003b7b573d6000803e3d6000fd5b505050506040513d602081101562003b9257600080fd5b5050601554604080517f81bad6f300000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052600060448301819052606483019190915273ffffffffffffffffffffffffffffffffffffffff90931660848201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d926381bad6f39260a4808201939182900301818387803b15801562003c3757600080fd5b505af115801562003c4c573d6000803e3d6000fd5b5050600f5460185460408051878152905173ffffffffffffffffffffffffffffffffffffffff93841695509190921692507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600f54601554604080517fe4ad9a1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481018690528151929093169263e4ad9a1892604480830193928290030181600087803b15801562003d2357600080fd5b505af115801562003d38573d6000803e3d6000fd5b505050506040513d604081101562003d4f57600080fd5b5050601554600f54604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905160009392909216916370a0823191602480820192602092909190829003018186803b15801562003dcc57600080fd5b505afa15801562003de1573d6000803e3d6000fd5b505050506040513d602081101562003df857600080fd5b505190506200225b81838501620047f2565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000fee577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602581526020018062012b376025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a162000fee62004937565b6101a46008819055604080517fffa18649000000000000000000000000000000000000000000000000000000008152600481019290925251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200400057600080fd5b505af115801562004015573d6000803e3d6000fd5b505050506040513d60208110156200402c57600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815261245960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b158015620040e157600080fd5b505af1158015620040f6573d6000803e3d6000fd5b505050506040513d60208110156200410d57600080fd5b5051600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa186490000000000000000000000000000000000000000000000000000000081526201833360048201529051620041c991737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200076b57600080fd5b600c55612710600b55604051620041e09062004b76565b604051809103906000f080158015620041fd573d6000803e3d6000fd5b50600d80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff93841602179055600a54600b54604051919092169190620042609062004b84565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f0801580156200430f573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600a80547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167505dc0000000000000000000000000000000000000000179055600d8054610bb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055620043d061beef620047d9565b601755600a546040517401000000000000000000000000000000000000000090910463ffffffff1690620044049062004b92565b63ffffffff909116815260405190819003602001906000f0801580156200442f573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d54604051640100000000909104909116906200448f9062004ba0565b73ffffffffffffffffffffffffffffffffffffffff909116815260405190819003602001906000f080158015620044ca573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200451e9062004bae565b604051809103906000f0801580156200453b573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040516200458f9062004bbc565b604051809103906000f080158015620045ac573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620046009062004bca565b604051809103906000f0801580156200461d573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620046719062004bd8565b604051809103906000f0801580156200468e573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055601154604051918316921690620046e99062004be6565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f0801580156200472a573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556200477a6200244e565b600d54601754620047929163ffffffff1690620002d4565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff1690565b80821462000fee577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602281526020018062012aed6022913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a162000fee62004937565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b620049416200491c565b1562004b3a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b6020831062004a4857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162004a09565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b6020831062004acc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162004a8d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462004b30576040519150601f19603f3d011682016040523d82523d6000602084013e62004b35565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61020e8062004bf583390190565b6103cd8062004e0383390190565b61148080620051d083390190565b6104db806200665083390190565b6152dd8062006b2b83390190565b612783806200be0883390190565b611581806200e58b83390190565b61070d806200fb0c83390190565b612583806201021983390190565b610351806201279c8339019056fe608060405234801561001057600080fd5b506101ee806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063048494fe1461003b578063f8a8fd6d14610128575b600080fd5b610126600480360360e081101561005157600080fd5b63ffffffff823581169260208101359260408201359092169160608201359173ffffffffffffffffffffffffffffffffffffffff6080820135169160a0820135919081019060e0810160c08201356401000000008111156100b157600080fd5b8201836020820111156100c357600080fd5b803590602001918460018302840111640100000000831117156100e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610142945050505050565b005b6101306101db565b60408051918252519081900360200190f35b6101f48763ffffffff16111561015757600080fd5b600a8763ffffffff1611156101cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f6e6f706521000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b607b60005550505050505050565b6000548156fea164736f6c6343000706000a608060405234801561001057600080fd5b506103ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063172a93fb146100465780636c2676331461008b5780637013ca26146100d2575b600080fd5b6100896004803603606081101561005c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610113565b005b6100be600480360360208110156100a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661017d565b604080519115158252519081900360200190f35b6100da6101f9565b60405180826101c080838360005b838110156101005781810151838201526020016100e8565b5050505090500191505060405180910390f35b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf331836040518082815260200191505060405180910390a3505050565b6000806101886101f9565b905060005b600e8110156101ed578181600e81106101a257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156101e5576001925050506101f4565b60010161018d565b5060009150505b919050565b610201610381565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b604051806101c00160405280600e90602082028036833750919291505056fea164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a608060405234801561001057600080fd5b506040516104db3803806104db8339818101604052602081101561003357600080fd5b50516000805463ffffffff90921663ffffffff1990921691909117905561047c8061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a60a060405234801561001057600080fd5b50604051620052dd380380620052dd8339818101604052602081101561003557600080fd5b5051606081901b6001600160601b0319166080526001600160a01b031661525a6200008360003980610d035280610e815280610f5f52806111555280611ec35280611f7b525061525a6000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a608060405234801561001057600080fd5b50612763806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001c05760003560e01c80638da5cb5b11620000f9578063ccf5a77c1162000099578063ec694a14116200006f578063ec694a1414620005d1578063f153768614620006e1578063f2fde38b146200071757620001c0565b8063ccf5a77c1462000559578063d82d05311462000563578063dc9685a714620005a557620001c0565b8063b9730eaf11620000cf578063b9730eaf1462000491578063c2561f6514620004c7578063c86415cb146200050f57620001c0565b80638da5cb5b146200042f5780639d2f254f1462000439578063b869d89a146200046557620001c0565b80633339df961162000165578063589b3c64116200013b578063589b3c6414620003b1578063715018a614620003dd57806380350c2214620003e757620001c0565b80633339df96146200033357806341bdc8b5146200033d578063485cc955146200037357620001c0565b80631ecf6f9f116200019b5780631ecf6f9f146200029d57806328b1aea014620002bd5780632c3da59c146200030757620001c0565b806303e418c214620001c55780630e71e251146200021b5780630fdeeba9146200027a575b600080fd5b620001fb60048036036020811015620001dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200074d565b6040805163ffffffff909316835260208301919091528051918290030190f35b62000251600480360360208110156200023357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200076f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620002846200083f565b6040805163ffffffff9092168252519081900360200190f35b6200025160048036036020811015620002b557600080fd5b503562000850565b6200030560048036036060811015620002d557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000878565b005b62000251600480360360408110156200031f57600080fd5b5063ffffffff813516906020013562000944565b62000251620009e1565b62000305600480360360208110156200035557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620009fd565b62000305600480360360408110156200038b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351662000af1565b6200025160048036036040811015620003c957600080fd5b5063ffffffff813516906020013562000c59565b6200030562000c98565b6200030560048036036060811015620003ff57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000932565b6200025162000d47565b62000251600480360360408110156200045157600080fd5b5063ffffffff813516906020013562000d63565b62000251600480360360408110156200047d57600080fd5b5063ffffffff813516906020013562000d71565b620001fb60048036036020811015620004a957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000e56565b6200030560048036036060811015620004df57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000ea1565b62000545600480360360208110156200052757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000eae565b604080519115158252519081900360200190f35b6200025162000ef4565b62000251600480360360408110156200057b57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000f10565b6200025160048036036040811015620005bd57600080fd5b5063ffffffff813516906020013562000f28565b620005fd60048036036040811015620005e957600080fd5b5063ffffffff813516906020013562000f96565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200064057818101518382015260200162000626565b50505050905090810190601f1680156200066e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006a357818101518382015260200162000689565b50505050905090810190601f168015620006d15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b620001fb60048036036020811015620006f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000fb0565b62000305600480360360208110156200072f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662001031565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252906200082457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620008388160000151826020015162000f28565b9392505050565b60006200084b620011da565b905090565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b62000882620011e6565b73ffffffffffffffffffffffffffffffffffffffff16620008a262000d47565b73ffffffffffffffffffffffffffffffffffffffff16146200092557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000932838383620011ea565b6200093f838383620012bc565b505050565b60008062000953848462000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b62000a07620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000a2762000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff168062000b0d575062000b0d620013d6565b8062000b1c575060005460ff16155b62000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562000bda57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905562000c2582620013e9565b80156200093f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000c65620011da565b63ffffffff168363ffffffff16141562000c8c5762000c848262001550565b9050620009db565b620009d8838362000f28565b62000ca2620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000cc262000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d8838362001553565b600062000d7d620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000d9d62000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000e2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000e2c838362000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009db57620009d8838362001553565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b6200093f838383620011ea565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000ee95750600062000eef565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b6000620009d88362000f22846200187e565b62000c59565b60008062000f37848462001897565b9050600062000f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60608062000fa5848462001933565b915091509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925282916200101e5762001009620011da565b925062001016846200187e565b91506200102b565b8051602082015190935091505b50915091565b6200103b620011e6565b73ffffffffffffffffffffffffffffffffffffffff166200105b62000d47565b73ffffffffffffffffffffffffffffffffffffffff1614620010de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166200114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620027036026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006200084b62001a13565b3390565b63ffffffff83166200125d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff81166200133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006200134d848462001897565b905060006200137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b6000620013e33062001ab2565b15905090565b600054610100900460ff168062001405575062001405620013d6565b8062001414575060005460ff16155b6200146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff16158015620014d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200151c62001ab8565b80156200154c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff16906200157e9062002192565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f080158015620015c8573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200161457600080fd5b505af115801562001629573d6000803e3d6000fd5b505050506000806200163c858562001933565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015620016b85781810151838201526020016200169e565b50505050905090810190601f168015620016e65780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200171b57818101518382015260200162001701565b50505050905090810190601f168015620017495780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200176c57600080fd5b505af115801562001781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b620017ab62000d47565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620017f857600080fd5b505af11580156200180d573d6000803e3d6000fd5b505050506200181e858585620012bc565b6200182b858585620011ea565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529062001be8565b600080620018fe8362001c0e565b6bffffffffffffffffffffffff16905060006200191b8462001c22565b6bffffffffffffffffffffffff169091209392505050565b6060806000620019438462001c36565b915050620019518562001d0e565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801562001a7f57600080fd5b505afa15801562001a94573d6000803e3d6000fd5b505050506040513d602081101562001aab57600080fd5b5051905090565b3b151590565b600054610100900460ff168062001ad4575062001ad4620013d6565b8062001ae3575060005460ff16155b62001b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001ba157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b62001bab62001d70565b62001bb562001e8a565b801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b81516000906020840162001c0564ffffffffff8516828462002024565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600080601f5b600f8160ff16111562001ca35760ff600882021684901c62001c5e8162002081565b61ffff16841793508160ff1660101462001c7a57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c3c565b50600f5b60ff8160ff1610156200102b5760ff600882021684901c62001cc98162002081565b61ffff16831792508160ff1660001462001ce557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001ca7565b60006030815b600a8160ff16101562001d695760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d5d57fe5b04935060010162001d14565b5050919050565b600054610100900460ff168062001d8c575062001d8c620013d6565b8062001d9b575060005460ff16155b62001df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001ea6575062001ea6620013d6565b8062001eb5575060005460ff16155b62001f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001f7357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001f7f620011e6565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080620020338484620020b5565b905060405181111562002044575060005b8062002074577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505062000838565b62001c0585858562002128565b60006200209560048360ff16901c6200213b565b60ff161760081b62ffff0016620020ac826200213b565b60ff1617919050565b81810182811015620009db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f841691829081106200218357fe5b016020015160f81c9392505050565b61056280620021a18339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6106908061007d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9608052610120604052600160e052603160f81b610100527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a05261190160f01b60c05234801561007057600080fd5b5060805160a05160c05160f01c6124de6100a5600039806110fa52508061142f525080610d84528061109652506124de6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a60a060405234801561001057600080fd5b506040516103513803806103518339818101604052604081101561003357600080fd5b5080516020909101516100458261005b565b60601b6001600160601b0319166080525061015b565b6000546001600160a01b03828116911614156100a9576040805162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b604482015290519081900360640190fd5b6100bc8161015560201b6101c71760201c565b61010d576040805162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b151590565b60805160601c6101da61017760003980601c52506101da6000f3fe60806040523373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461004d5760005460005260206000f35b6000356100598161005c565b50005b60005473ffffffffffffffffffffffffffffffffffffffff828116911614156100e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2175706772616465000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6100ef816101c7565b61015a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b15159056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e745d45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "398:9991:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4037:637:57;;;;;;;;;;;;;;;;-1:-1:-1;4037:637:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;757:348:48;;;:::i;:::-;;5969:1042;;;:::i;5580:262::-;;;:::i;7017:973::-;;;:::i;1111:105::-;;;:::i;321:38:1:-;;;:::i;2146:640:48:-;;;:::i;1749:391::-;;;:::i;4781:793::-;;;:::i;1222:323::-;;;:::i;3247:554:57:-;;;:::i;1819:584:0:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;7996:968:48;;;:::i;9972:415::-;;;:::i;8970:996::-;;;:::i;4591:184::-;;;:::i;2792:777::-;;;:::i;170:28:1:-;;;:::i;1572:26:0:-;;;:::i;3766:819:48:-;;;:::i;4037:637:57:-;4180:13;;:90;;;;;;;;;;;;;;;;;;;;;4134:7;;;;4180:13;;;;;:33;;:90;;;;;;;;;;;;;;;4134:7;4180:13;:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4180:90:57;4466:19;;;;;;;;4180:90;;-1:-1:-1;4180:90:57;;4457:52;;4466:17;;;;;;:19;;;;;4180:90;;4466:19;;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4466:19:57;4495:12;;;;4457:8;:52::i;:::-;282:28:1;274:37;;258:55;;250:64;;4519:13:57;;;4533:11;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4533:19:57;4519:34;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4519:34:57;;;;;;;-1:-1:-1;4519:34:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4580:10:57;;4592:21;;4563:51;;;;;;:16;4580:10;;;4563:51;;;;;;;;;;;;:16;;;;-1:-1:-1;4563:16:57;;-1:-1:-1;4563:51:57;;;;;4580:10;;4563:51;;;;;;;;4580:10;4563:16;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4624:14:57;;;;;;;;250:64:1;;-1:-1:-1;4624:12:57;;-1:-1:-1;4624:14:57;;;;;274:37:1;;4624:14:57;;;;;;;274:37:1;250:64;4624:14:57;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4655:12:57;;4037:637;-1:-1:-1;;;;;;;4037:637:57:o;757:348:48:-;800:13;:11;:13::i;:::-;837:10;;823:11;:24;;;;837:10;;;;823:24;;;;;;900:13;;;;;;908:4;900:13;;;;;;873:41;;250:64:1;;900:7:48;;:13;;;;;;;;;;;;;;;837:10;250:64:1;900:13:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;900:13:48;873:26;:41::i;:::-;857:13;:57;939:11;;924:12;:26;;977:12;;939:11;977:12;;;924:26;;;;939:11;;;;;924:26;;;;;;960:29;;;;;;;;1017:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;999:15:48;:39;;;;;;;;;;;1074:23;;1048:11;:50;;;;1074:23;;;;1048:50;;;;;757:348::o;5969:1042::-;6126:10;;6150:12;;6126:46;;;;;;:10;6150:12;;;6126:46;;;;6039:4;6126:46;;;;;;;;6039:4;;6081:2;;6126:10;;:15;;:46;;;;;6022:14;;6126:46;;;;;;;;6022:14;6126:10;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6229:10:48;;6182:59;;;;;;6196:4;6182:59;;;;;;;;;;;;-1:-1:-1;6182:59:48;;;;;;;;;;;;;:13;6229:10;;;6182:59;;;;;;250:64:1;;-1:-1:-1;6182:13:48;;-1:-1:-1;6182:59:48;;;;;-1:-1:-1;6182:59:48;;;;;-1:-1:-1;250:64:1;6182:59:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6273:12:48;;6256:50;;;;;;;;;;;;;-1:-1:-1;6273:12:48;;;;;-1:-1:-1;6256:50:48;;;;;;;;;;6316:12;;6347:10;;6316:62;;;;;;:12;6347:10;;;6316:62;;;;;;;;;;;;;;;;;;;:12;;;;;:22;;:62;;;;;:12;;:62;;;;;;;:12;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6537:35;6575:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6575:31:48;-1:-1:-1;6621:9:48;6616:389;6640:15;6636:1;:19;6616:389;;;6676:9;6688:8;6697:1;6688:11;;;;;;;;;;;6676:23;;282:28:1;274:37;;258:55;;250:64;;6713:13:48;;;6744:4;6766;6788:5;6811:4;6841:12;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6841:25:48;6713:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6713:168:48;;;;;;;-1:-1:-1;6713:168:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6900:36:48;;;;;;;;;;;;;-1:-1:-1;6900:36:48;;;-1:-1:-1;6900:36:48;;;;;;;;;6950:12;;:44;;;;;;:12;:44;;;;;;;;;;;;;;;;;;;;;;:12;;;;;:22;;:44;;;;;:12;;:44;;;;;;;:12;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6657:3:48;;;;;-1:-1:-1;6616:389:48;;-1:-1:-1;;6616:389:48;;;5969:1042;;;:::o;5580:262::-;5634:35;5672:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5672:31:48;-1:-1:-1;5718:9:48;5713:123;5737:15;5733:1;:19;5713:123;;;5781:14;;;;;;;:30;5812:8;5821:1;5812:11;;;;;;;;;;;5781:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5781:43:48;5773:52;;;;;;5754:3;;5713:123;;;;5580:262;:::o;7017:973::-;7117:15;;7094:12;;7109:43;;7117:15;;7109:41;:43::i;:::-;7094:58;-1:-1:-1;7184:3:48;7197:32;7162:19;7256:34;7264:6;7256:32;:34::i;:::-;7300:10;;7324:12;;7300:51;;;;;;:10;7324:12;;;7300:51;;;;;;;;;;;;7239;;-1:-1:-1;7300:10:48;;;:15;;:51;;;;;:10;;:51;;;;;;;;:10;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7361:22;:33;;;;;;;;;;;;;;;;;;;7404:19;7456:34;7504:4;7522:11;7547:16;7577:6;7597:9;7426:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7670:2:48;7735:11;;7768:10;;7426:190;;-1:-1:-1;7642:3:48;;-1:-1:-1;7670:2:48;;-1:-1:-1;;;;7735:11:48;;;;;;-1:-1:-1;7760:38:48;;-1:-1:-1;7768:10:48;;;-1:-1:-1;7760:36:48;;-1:-1:-1;7760:38:48:i;:::-;7705:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7818:24;;;;;;;;;;;;;;;;;;7705:103;;-1:-1:-1;250:64:1;;7818:15:48;;:24;;;;;-1:-1:-1;;7818:24:48;;;;;;;-1:-1:-1;250:64:1;7818:24:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:12;;;;;;;;;;;:41;;;7907:6;7927:5;7946:7;7967:6;7852:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7852:131:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7017:973;;;;;;;;;:::o;1111:105::-;1170:12;;:26;;;;;;;;1161:48;;1170:12;;;:24;;:26;;;;;;;;;;;;;;:12;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1170:26:48;1198:10;1161:8;:48::i;:::-;1111:105::o;321:38:1:-;250:64;321:38;:::o;2146:640:48:-;2246:11;;2232:26;;;;;;:13;2246:11;;;2232:26;;;;;2219:3;;250:64:1;;2232:13:48;;:26;;;;;-1:-1:-1;;2232:26:48;;;;;;;;-1:-1:-1;250:64:1;2232:26:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2268:10:48;;2295:12;;2268:49;;;;;;:10;2295:12;;;2268:49;;;;;;;;;;;;:10;;;;;-1:-1:-1;2268:18:48;;-1:-1:-1;2268:49:48;;;;;;;;;;;;;;:10;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2327:45:48;;;;;;2268:49;2327:45;;;;;;;;;;;;;;;;250:64:1;;2327:15:48;;:45;;;;;274:37:1;;2327:45:48;;;;;;;274:37:1;250:64;2327:45:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2382:12:48;;2421:10;;2466:14;;2494:13;;2382:169;;;;;;:12;2421:10;;;2382:169;;;;;;;;;;2466:14;;;2382:169;;;;;;;;;;;2521:20;;;;;;2382:169;;;;;;;;:12;;;;;-1:-1:-1;2382:17:48;;-1:-1:-1;2382:169:48;;;;;-1:-1:-1;;2382:169:48;;;;;;;-1:-1:-1;2382:12:48;:169;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2561:45:48;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;2561:15:48;;-1:-1:-1;2561:45:48;;;;;274:37:1;;2561:45:48;;;;;;;274:37:1;250:64;2561:45:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2616:12:48;;2661:10;;2706:14;;2734:13;;2616:163;;;;;;:12;2661:10;;;2616:163;;;;;;;;;;2706:14;;;;2616:163;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;;;;;-1:-1:-1;2616:23:48;;-1:-1:-1;2616:163:48;;;;;:12;;:163;;;;;;;:12;;:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2146:640;:::o;1749:391::-;1852:11;;1838:26;;;;;;:13;1852:11;;;1838:26;;;;;1825:3;;250:64:1;;1838:13:48;;:26;;;;;-1:-1:-1;;1838:26:48;;;;;;;;-1:-1:-1;250:64:1;1838:26:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1874:59:48;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;1874:15:48;;-1:-1:-1;1874:59:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1943:12:48;;1982:10;;2027:11;;2052:13;;2079:20;;1943:166;;;;;;:12;1982:10;;;1943:166;;;;;;;;;;2027:11;;;;;;1943:166;;;;;;;;;;;2079:20;;;;;1943:166;;;;;;;:12;;;;;-1:-1:-1;1943:17:48;;-1:-1:-1;1943:166:48;;;;;-1:-1:-1;;1943:166:48;;;;;;;-1:-1:-1;1943:12:48;:166;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2119:14:48;;;;;;;;250:64:1;;-1:-1:-1;2119:12:48;;-1:-1:-1;2119:14:48;;;;;274:37:1;;2119:14:48;;;;;;;274:37:1;250:64;2119:14:48;;;;;;;;;;4781:793;4894:11;;4916;;4894:34;;;;;;:11;4916;;;4894:34;;;;;;4855:3;;4838:14;;4894:11;;;;;;:21;;:34;;;;;;;;;;;;;;:11;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4894:34:48;4952:11;;4938:26;;;;;;:13;4952:11;;;4938:26;;;;;4894:34;;-1:-1:-1;250:64:1;;4938:13:48;;:26;;;;;-1:-1:-1;;4938:26:48;;;;;;;;-1:-1:-1;250:64:1;4938:26:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5021:10:48;;4974:59;;;;;;4988:4;4974:59;;;;;;;;;;;;-1:-1:-1;4974:59:48;;;;;;;;;;;;;:13;5021:10;;;4974:59;;;;;;250:64:1;;-1:-1:-1;4974:13:48;;-1:-1:-1;4974:59:48;;;;;-1:-1:-1;4974:59:48;;;;;-1:-1:-1;250:64:1;4974:59:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5078:12:48;;5057:11;;5048:52;;;;;;;;5078:12;;;;;-1:-1:-1;5057:11:48;;;;;-1:-1:-1;5048:52:48;;;;;;;;;5180:10;;5207:12;;5180:49;;;;;;:10;5207:12;;;5180:49;;;;;;;;;;;;:10;;;;;:18;;:49;;;;;;;;;;;;;;:10;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5286:11:48;;5239:60;;;;;;5253:4;5239:60;;;;;;;;;;;;274:37:1;5239:60:48;;;;;;;;;;;;;5286:11;;;;5239:13;5286:11;5239:60;;;;;;250:64:1;;5239:13:48;;:60;;;;;;;;;;;274:37:1;250:64;5239:60:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5323:11:48;;5314:41;;;;;;;;5344:1;;-1:-1:-1;5314:41:48;5323:11;;;;;-1:-1:-1;5314:41:48;;;;;;;;;;5365:12;;5397:11;;5365:53;;;;;;5397:11;;;;5365:12;5397:11;;;5365:53;;;;;;;;;;;;:12;;;:23;;:53;;;;;;;;;;;;:12;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5451:11:48;;5473;;5365:53;5451:34;;;;;:11;5473;;;5451:34;;;;;;-1:-1:-1;;5451:11:48;;;;;;;:21;;:34;;;;;5365:53;;5451:34;;;;;;;;:11;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5451:34:48;;-1:-1:-1;5495:48:48;5451:34;5518:24;;;5495:8;:48::i;:::-;5553:14;;;;;;;;250:64:1;;5553:12:48;;:14;;;;;274:37:1;;5553:14:48;;;;;;;274:37:1;250:64;5553:14:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4781:793;;;:::o;1222:323::-;1350:25;;;;;;;;;;;;;;;;;;;;;;;1277:20;;1337:3;;250:64:1;;1350:15:48;;:25;;;;1277:20;;1350:25;;;;;;;1277:20;250:64:1;1350:25:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1385:12:48;;1424:10;;1469:14;;1385:153;;;;;;:12;1424:10;;;1385:153;;;;;;;;;;1469:14;;;;1385:153;;;;;;;;;;:12;:153;;;;;;;;:12;;;;;-1:-1:-1;1385:17:48;;-1:-1:-1;1385:153:48;;;;;:12;:153;;;;;;:12;;:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:323;;:::o;3247:554:57:-;3295:13;;3341:11;;3375:21;;3295:112;;;;;;:13;3341:11;;;3295:112;;;;3375:21;;;3295:112;;;;;:13;;;;;:24;;:112;;;;;:13;;:112;;;;;;;:13;;:112;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3417:12:57;;3462:13;;3498:21;;3417:113;;;;;;:12;3462:13;;;3417:113;;;;3498:21;;;3417:113;;;;;:12;;;;;-1:-1:-1;3417:23:57;;-1:-1:-1;3417:113:57;;;;;:12;;:113;;;;;;;:12;;:113;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3607:13:57;;3647:12;;3607:54;;;;;;:13;3647:12;;;3607:54;;;;;;:13;;;;;-1:-1:-1;3607:31:57;;-1:-1:-1;3607:54:57;;;;;:13;;:54;;;;;;;:13;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3671:21:57;;3709:8;;3671:48;;;;;;:21;3709:8;;;3671:48;;;;;;:21;;;;;-1:-1:-1;3671:29:57;;-1:-1:-1;3671:48:57;;;;;:21;;:48;;;;;;;:21;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3729:12:57;;3761;;3775:18;;3729:65;;;;;;3761:12;;;;3729:65;;;;;;;;;;;;:12;;;;;-1:-1:-1;3729:31:57;;-1:-1:-1;3729:65:57;;;;;:12;;:65;;;;;;;;:12;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584:0;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:0;;;;;;;1896:14;;1869:528;1941:17;1984:16;:14;:16::i;:::-;1980:374;;;2196:43;;;1671:64;2196:43;;;;;;;2221:17;2196:43;;;;;;;;;;;;;1679:55;2196:43;;;;;2086:175;;;;;;;;;2023:20;;1671:64;;2135:34;;2196:43;2086:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2047:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;;;;-1:-1:-1;2312:27:0;;-1:-1:-1;;1980:374:0;2374:12;-1:-1:-1;1869:528:0;1819:584;:::o;7996:968:48:-;8098:15;;8075:12;;8090:43;;8098:15;;8090:41;:43::i;:::-;8075:58;-1:-1:-1;8165:3:48;8178:32;8143:19;8237:34;8245:6;8237:32;:34::i;:::-;8281:10;;8305:12;;8281:51;;;;;;:10;8305:12;;;8281:51;;;;;;;;;;;;8220;;-1:-1:-1;8281:10:48;;;:15;;:51;;;;;:10;;:51;;;;;;;;:10;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:22;:33;;;;;;;;;;;;;;;;;;;8385:19;8437:34;8485:4;8503:11;8528:16;8558:6;8578:9;8407:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8651:2:48;8716:11;;8749:10;;8407:190;;-1:-1:-1;8623:3:48;;-1:-1:-1;8651:2:48;;-1:-1:-1;;;;8716:11:48;;;;;;-1:-1:-1;8741:38:48;;-1:-1:-1;8749:10:48;;;-1:-1:-1;8741:36:48;;-1:-1:-1;8741:38:48:i;:::-;8686:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8663:126;;282:28:1;274:37;;258:55;;250:64;;8799:15:48;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9972:415;10020:35;10058:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10058:31:48;-1:-1:-1;10104:9:48;10099:282;10123:15;10119:1;:19;10099:282;;;10159:17;;;;;;;;250:64:1;;10159:15:48;;:17;;;;;274:37:1;;10159:17:48;;;;;;;274:37:1;250:64;10159:17:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10190:12:48;;;;;-1:-1:-1;10190:17:48;;-1:-1:-1;10225:8:48;10234:1;10225:11;;;;;;;;;;;10273:14;;10305:13;;10190:180;;;;;;;;;;;;;;;;;;;10254:1;10190:180;;;;10273:14;;;10190:180;;;;;;;;;;;10336:20;;;;;;10190:180;;;;;;;;;;;;-1:-1:-1;;10190:180:48;;;;;;;-1:-1:-1;10190:180:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10140:3:48;;;;;-1:-1:-1;10099:282:48;;-1:-1:-1;10099:282:48;8970:996;9053:15;;9030:12;;9045:43;;9053:15;;9045:41;:43::i;:::-;9030:58;-1:-1:-1;9120:3:48;9133:32;9098:19;9192:34;9200:6;9192:32;:34::i;:::-;9236:10;;9260:12;;9236:51;;;;;;:10;9260:12;;;9236:51;;;;;;;;;;;;9175;;-1:-1:-1;9236:10:48;;;:15;;:51;;;;;:10;;:51;;;;;;;;:10;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9297:22;:33;;;;;;;;;;;;;;;;;;;9340:19;9392:34;9440:4;9458:11;9483:16;9513:6;9533:9;9362:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9604:2:48;9669:11;;9702:10;;9362:190;;-1:-1:-1;9578:1:48;;-1:-1:-1;9604:2:48;;-1:-1:-1;;;;9669:11:48;;;;;;-1:-1:-1;9694:38:48;;-1:-1:-1;9702:10:48;;;-1:-1:-1;9694:36:48;;-1:-1:-1;9694:38:48:i;:::-;9639:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9616:126;;9781:12;;;;;;;;;;;:41;;;9836:6;9856:5;9875:7;9896:6;9781:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9781:131:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9922:37;9931:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9931:22:48;9955:3;9922:8;:37::i;:::-;8970:996;;;;;;;;;:::o;4591:184::-;4682:24;;;;;;;;;;;;;;;;;;;;;;;4654:14;;250:64:1;;4682:15:48;;:24;;;;;4654:14;;4682:24;;;;;;;;4654:14;250:64:1;4682:24:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4716:12:48;;4748:10;;4716:52;;;;;;:12;4748:10;;;4716:52;;;;;;;;;;;;:12;;;;;-1:-1:-1;4716:23:48;;-1:-1:-1;4716:52:48;;;;;;;;;;;;;:12;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4591:184:48:o;2792:777::-;2887:11;;2873:26;;;;;;:13;2887:11;;;2873:26;;;;;2860:3;;250:64:1;;2873:13:48;;:26;;;;;-1:-1:-1;;2873:26:48;;;;;;;;-1:-1:-1;250:64:1;2873:26:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2979:11:48;;3007:12;;2979:50;;;;;;:11;3007:12;;;2979:50;;;;;;;;;;;;:11;;;;;;;;-1:-1:-1;2979:19:48;;-1:-1:-1;2979:50:48;;;;;;;;;;;;;;;-1:-1:-1;2979:11:48;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3147:12:48;;3101:60;;;;;;3115:4;3101:60;;;;;;;;;;;;;;;;;;;;;;:13;3147:12;;;3101:60;;;;;250:64:1;;3101:13:48;;:60;;;;;-1:-1:-1;;3101:60:48;;;;;;;-1:-1:-1;250:64:1;3101:60:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3253:14:48;;3228:11;;3281:13;;3176:182;;;;;;;;;;;;3328:20;;;;;3176:182;;;;;;;3253:14;;;;-1:-1:-1;3228:11:48;;;;;-1:-1:-1;3202:11:48;;;;;;;;3176:182;;;;;;;;;3368:12;;3407:11;;3481:13;;3368:170;;;;;;:12;3407:11;;;;;3368:170;;;;;;;;;;3453:14;;;3368:170;;;;;;;;;;;3508:20;;;;;;3368:170;;;;;;;:12;;;:17;;:170;;;;;-1:-1:-1;;3368:170:48;;;;;;;;-1:-1:-1;3368:12:48;:170;;;;;;;;;;170:28:1;;;;;;;;;:::o;1572:26:0:-;;;;;;:::o;3766:819:48:-;3878:10;;3907:12;;3878:43;;;;;;:10;3907:12;;;3878:43;;;;;;3839:3;;3822:14;;3878:10;;:20;;:43;;;;;;;;;;;;;;:10;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3878:43:48;3978:10;;3931:59;;;;;;3945:4;3931:59;;;;;;;;;;;;-1:-1:-1;3931:59:48;;;;;;;;;;;;;:13;3978:10;;;3931:59;;;;;;3878:43;;-1:-1:-1;250:64:1;;3931:13:48;;:59;;;;;-1:-1:-1;;3931:59:48;;;;;;-1:-1:-1;250:64:1;3931:59:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4035:12:48;;4014:11;;4005:52;;;;;;;;4035:12;;;;;-1:-1:-1;4014:11:48;;;;;-1:-1:-1;4005:52:48;;;;;;;;;4151:11;;4137:26;;;;;;:13;4151:11;;;4137:26;;;;;250:64:1;;4137:13:48;;:26;;;;;-1:-1:-1;;4137:26:48;;;;;;;-1:-1:-1;250:64:1;4137:26:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4173:10:48;;4200:12;;4173:49;;;;;;:10;4200:12;;;4173:49;;;;;;;;;;;;:10;;;;;-1:-1:-1;4173:18:48;;-1:-1:-1;4173:49:48;;;;;;;;;;;;;;:10;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4279:10:48;;4232:59;;;;;;4246:4;4232:59;;;;;;;;;;;;-1:-1:-1;4232:59:48;;;;;;;;;;;;;:13;4279:10;;;4232:59;;;;;;250:64:1;;4232:13:48;;:59;;;;;;;;;;;-1:-1:-1;250:64:1;4232:59:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4336:12:48;;4315:11;;4306:52;;;;;;;;4336:12;;;;;-1:-1:-1;4315:11:48;;;;;-1:-1:-1;4306:52:48;;;;;;;;;4368:12;;4400:10;;4368:52;;;;;;:12;4400:10;;;4368:52;;;;;;;;;;;;:12;;;;;:23;;:52;;;;;;;;;;;:12;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4453:10:48;;4482:12;;4368:52;4453:43;;;;;:10;4482:12;;;4453:43;;;;;;4430:20;;4453:10;;;;;:20;;:43;;;;;4368:52;;4453:43;;;;;;;;:10;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4453:43:48;;-1:-1:-1;4506:48:48;4453:43;4529:24;;;4506:8;:48::i;3615:277:0:-;3683:1;3678:6;;:1;:6;;;3674:212;;3705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3768:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3869:6;:4;:6::i;1808:1433:57:-;2039:3;2023:13;:19;;;2066:22;;;;;;;;;;;;;;250:64:1;;2066:7:57;;:22;;;;;;;;;;;;;;274:37:1;250:64;2066:22:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2066:22:57;2052:11;:36;;;;;;;;;;;;;;2111:13;;;;;;2119:4;2111:13;;;;;;250:64:1;;2111:7:57;;:13;;;;;2066:22;;2111:13;;;;;;;-1:-1:-1;250:64:1;2111:13:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2111:13:57;2098:10;:26;;;;;;;;;;;;;;2182:14;;;;;;2190:5;2182:14;;;;;;2155:42;;250:64:1;;2182:7:57;;:14;;;;;2111:13;;2182:14;;;;;;;;-1:-1:-1;250:64:1;2182:14:57;;;;;;;;;;2155:42;2134:18;:63;2231:5;2207:21;:29;2263:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2246:14:57;:37;;;;;;;;;;;;;2372:10;;2396:21;;2307:120;;2372:10;;;;;2396:21;2307:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2307:120:57;;;;;;;;;;;;;;;-1:-1:-1;2294:10:57;:133;;;;;;;;;;;;;;;2437:11;:18;;;;;;;;2465:12;:19;;2480:4;2465:19;;;;;;;2521:43;2556:6;2521:26;:43::i;:::-;2494:24;:70;2598:11;;2585:25;;2598:11;;;;;;;2585:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2574:8:57;:36;;;;;;;;;;;2710:14;;2670:56;;2710:14;;;;;;;;2670:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2655:12:57;:71;;;;;;;;;;;;;;;2752:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2736:13:57;:42;;;;;;;;;;;;;;;2812:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2788:21:57;:51;;;;;;;;;;;;;;;2875:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2849:23:57;:55;;;;;;;;;;;;;;;2928:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2914:11:57;:31;;;;;;;;;;;;;3042:23;;2969:107;;3008:11;;;;3042:23;;2969:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2969:107:57;;;;;;;;;;;;;;;-1:-1:-1;2955:11:57;:121;;;;;;;;;;;;;;;3086:21;:19;:21::i;:::-;3174:12;;3200:24;;3143:91;;3174:12;;;3143:17;:91::i;:::-;3117:23;:117;;;;;;;;;;;;;;;1808:1433::o;999:129:75:-;1097:23;;;999:129::o;5202:262:0:-;5264:1;5259;:6;5255:203;;5286:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5346:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5441:6;:4;:6::i;2840:242::-;2990:42;2978:55;3059:16;;2840:242;:::o;2410:424::-;2449:16;:14;:16::i;:::-;2445:359;;;2645:67;;;1671:64;2645:67;;;;;;;2670:17;2645:67;;;;2705:4;1679:55;2645:67;;;;;;;;;;;;;;;;;;;;;;;2534:196;;;;;;;;;2482:11;;1671:64;;2579:43;;2645:67;2534:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2445:359:0;2813:7;:14;;;;;;;;2410:424::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "IS_SCRIPT()": "f8ccbf47",
    "IS_TEST()": "fa7626d4",
    "createRemoteToken(uint32,bytes32)": "055c21e9",
    "failed()": "ba414fa6",
    "initializeContracts()": "b45036f7",
    "setUp()": "0a9254e4",
    "test_dustAmmountIs006()": "302dffbd",
    "test_exitBridgeOnly()": "d5677963",
    "test_giveLocalUnaffected()": "0f8c829b",
    "test_handleHookTransferRevertsIfCallFailsMessage()": "2c02f67a",
    "test_handleHookTransferRevertsIfCallFailsNoMessage()": "d1f0b7e0",
    "test_handleHookTransferSucceeds()": "dd032940",
    "test_isAffectedAsset()": "18bab5b7",
    "test_sendFailZeroRecipient()": "80250bb6",
    "test_sendLocalTokenDisabled()": "4d56de54",
    "test_sendLocalTokenFailApprove()": "5af8d62e",
    "test_sendRemoteSuccess()": "f82821c9",
    "test_takeTokensLocalFailZeroAmount()": "e4273f0c",
    "test_takeTokensLocalSuccess()": "fdd276a8",
    "test_takeTokensRemoteSuccess()": "6def0727",
    "vm()": "3a768463"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/BridgeRouter.t.sol",
    "id": 36902,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "BridgeRouterTest": [
        36901
      ],
      "BridgeTest": [
        42467
      ],
      "BridgeToken": [
        31661
      ],
      "RevertingToHook": [
        42780
      ],
      "TypeCasts": [
        46345
      ],
      "console2": [
        23037
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:10344:48",
    "nodes": [
      {
        "id": 35860,
        "nodeType": "PragmaDirective",
        "src": "46:22:48",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 35862,
        "nodeType": "ImportDirective",
        "src": "70:50:48",
        "absolutePath": "packages/contracts-bridge/contracts/test/utils/BridgeTest.sol",
        "file": "./utils/BridgeTest.sol",
        "scope": 36902,
        "sourceUnit": 42468,
        "symbolAliases": [
          {
            "foreign": {
              "id": 35861,
              "name": "BridgeTest",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "78:10:48",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35864,
        "nodeType": "ImportDirective",
        "src": "121:51:48",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "../BridgeMessage.sol",
        "scope": 36902,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 35863,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "129:13:48",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35866,
        "nodeType": "ImportDirective",
        "src": "173:60:48",
        "absolutePath": "packages/contracts-bridge/contracts/test/utils/RevertingToHook.sol",
        "file": "./utils/RevertingToHook.sol",
        "scope": 36902,
        "sourceUnit": 42781,
        "symbolAliases": [
          {
            "foreign": {
              "id": 35865,
              "name": "RevertingToHook",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "181:15:48",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35868,
        "nodeType": "ImportDirective",
        "src": "234:81:48",
        "absolutePath": "packages/contracts-core/contracts/libs/TypeCasts.sol",
        "file": "@nomad-xyz/contracts-core/contracts/libs/TypeCasts.sol",
        "scope": 36902,
        "sourceUnit": 46346,
        "symbolAliases": [
          {
            "foreign": {
              "id": 35867,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "242:9:48",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35870,
        "nodeType": "ImportDirective",
        "src": "316:47:48",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeToken.sol",
        "file": "../BridgeToken.sol",
        "scope": 36902,
        "sourceUnit": 31662,
        "symbolAliases": [
          {
            "foreign": {
              "id": 35869,
              "name": "BridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "324:11:48",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 35871,
        "nodeType": "ImportDirective",
        "src": "364:32:48",
        "absolutePath": "lib/forge-std/src/console2.sol",
        "file": "forge-std/console2.sol",
        "scope": 36902,
        "sourceUnit": 23038,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 36901,
        "nodeType": "ContractDefinition",
        "src": "398:9991:48",
        "nodes": [
          {
            "id": 35875,
            "nodeType": "VariableDeclaration",
            "src": "444:19:48",
            "constant": false,
            "mutability": "mutable",
            "name": "tokenSender",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 35874,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "444:7:48",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35877,
            "nodeType": "VariableDeclaration",
            "src": "469:21:48",
            "constant": false,
            "mutability": "mutable",
            "name": "tokenReceiver",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 35876,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "469:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35879,
            "nodeType": "VariableDeclaration",
            "src": "497:21:48",
            "constant": false,
            "mutability": "mutable",
            "name": "receiverDomain",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 35878,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "497:6:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35881,
            "nodeType": "VariableDeclaration",
            "src": "524:19:48",
            "constant": false,
            "mutability": "mutable",
            "name": "senderDomain",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 35880,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "524:6:48",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35883,
            "nodeType": "VariableDeclaration",
            "src": "550:25:48",
            "constant": false,
            "mutability": "mutable",
            "name": "fastLiquidityEnabled",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 35882,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "550:4:48",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35885,
            "nodeType": "VariableDeclaration",
            "src": "581:23:48",
            "constant": false,
            "mutability": "mutable",
            "name": "remoteToken",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_BridgeToken_$31661",
              "typeString": "contract BridgeToken"
            },
            "typeName": {
              "id": 35884,
              "name": "BridgeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31661,
              "src": "581:11:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeToken_$31661",
                "typeString": "contract BridgeToken"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35887,
            "nodeType": "VariableDeclaration",
            "src": "611:31:48",
            "constant": false,
            "mutability": "mutable",
            "name": "revertingToHook",
            "scope": 36901,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
              "typeString": "contract RevertingToHook"
            },
            "typeName": {
              "id": 35886,
              "name": "RevertingToHook",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42780,
              "src": "611:15:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                "typeString": "contract RevertingToHook"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 35890,
            "nodeType": "UsingForDirective",
            "src": "649:28:48",
            "libraryName": {
              "id": 35888,
              "name": "TypeCasts",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46345,
              "src": "655:9:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypeCasts_$46345",
                "typeString": "library TypeCasts"
              }
            },
            "typeName": {
              "id": 35889,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "669:7:48",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "id": 35893,
            "nodeType": "UsingForDirective",
            "src": "682:36:48",
            "libraryName": {
              "id": 35891,
              "name": "TypeCasts",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46345,
              "src": "688:9:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypeCasts_$46345",
                "typeString": "library TypeCasts"
              }
            },
            "typeName": {
              "id": 35892,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "702:15:48",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            }
          },
          {
            "id": 35896,
            "nodeType": "UsingForDirective",
            "src": "723:28:48",
            "libraryName": {
              "id": 35894,
              "name": "TypeCasts",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46345,
              "src": "729:9:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypeCasts_$46345",
                "typeString": "library TypeCasts"
              }
            },
            "typeName": {
              "id": 35895,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "743:7:48",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 35940,
            "nodeType": "FunctionDefinition",
            "src": "757:348:48",
            "body": {
              "id": 35939,
              "nodeType": "Block",
              "src": "790:315:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 35900,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "800:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_BridgeRouterTest_$36901",
                          "typeString": "contract super BridgeRouterTest"
                        }
                      },
                      "id": 35902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setUp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42354,
                      "src": "800:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 35903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "800:13:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35904,
                  "nodeType": "ExpressionStatement",
                  "src": "800:13:48"
                },
                {
                  "expression": {
                    "id": 35907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35905,
                      "name": "tokenSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35875,
                      "src": "823:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 35906,
                      "name": "bridgeUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42189,
                      "src": "837:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "823:24:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 35908,
                  "nodeType": "ExpressionStatement",
                  "src": "823:24:48"
                },
                {
                  "expression": {
                    "id": 35917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35909,
                      "name": "tokenReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35877,
                      "src": "857:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "33303430",
                              "id": 35914,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "908:4:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3040_by_1",
                                "typeString": "int_const 3040"
                              },
                              "value": "3040"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_3040_by_1",
                                "typeString": "int_const 3040"
                              }
                            ],
                            "expression": {
                              "id": 35912,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1816,
                              "src": "900:2:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vm_$6909",
                                "typeString": "contract Vm"
                              }
                            },
                            "id": 35913,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6287,
                            "src": "900:7:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) external returns (address)"
                            }
                          },
                          "id": 35915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "900:13:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 35910,
                          "name": "TypeCasts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46345,
                          "src": "873:9:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                            "typeString": "type(library TypeCasts)"
                          }
                        },
                        "id": 35911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addressToBytes32",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46325,
                        "src": "873:26:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address) pure returns (bytes32)"
                        }
                      },
                      "id": 35916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "873:41:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "857:57:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 35918,
                  "nodeType": "ExpressionStatement",
                  "src": "857:57:48"
                },
                {
                  "expression": {
                    "id": 35921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35919,
                      "name": "senderDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35881,
                      "src": "924:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 35920,
                      "name": "localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42191,
                      "src": "939:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "924:26:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 35922,
                  "nodeType": "ExpressionStatement",
                  "src": "924:26:48"
                },
                {
                  "expression": {
                    "id": 35925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35923,
                      "name": "receiverDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35879,
                      "src": "960:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 35924,
                      "name": "remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42197,
                      "src": "977:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "960:29:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 35926,
                  "nodeType": "ExpressionStatement",
                  "src": "960:29:48"
                },
                {
                  "expression": {
                    "id": 35931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35927,
                      "name": "revertingToHook",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35887,
                      "src": "999:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                        "typeString": "contract RevertingToHook"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 35929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "1017:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_RevertingToHook_$42780_$",
                          "typeString": "function () returns (contract RevertingToHook)"
                        },
                        "typeName": {
                          "id": 35928,
                          "name": "RevertingToHook",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42780,
                          "src": "1021:15:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                            "typeString": "contract RevertingToHook"
                          }
                        }
                      },
                      "id": 35930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1017:21:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                        "typeString": "contract RevertingToHook"
                      }
                    },
                    "src": "999:39:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                      "typeString": "contract RevertingToHook"
                    }
                  },
                  "id": 35932,
                  "nodeType": "ExpressionStatement",
                  "src": "999:39:48"
                },
                {
                  "expression": {
                    "id": 35937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 35933,
                      "name": "remoteToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35885,
                      "src": "1048:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_BridgeToken_$31661",
                        "typeString": "contract BridgeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 35935,
                          "name": "remoteTokenLocalAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42217,
                          "src": "1074:23:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 35934,
                        "name": "BridgeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31661,
                        "src": "1062:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BridgeToken_$31661_$",
                          "typeString": "type(contract BridgeToken)"
                        }
                      },
                      "id": 35936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1062:36:48",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_BridgeToken_$31661",
                        "typeString": "contract BridgeToken"
                      }
                    },
                    "src": "1048:50:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BridgeToken_$31661",
                      "typeString": "contract BridgeToken"
                    }
                  },
                  "id": 35938,
                  "nodeType": "ExpressionStatement",
                  "src": "1048:50:48"
                }
              ]
            },
            "baseFunctions": [
              42354
            ],
            "functionSelector": "0a9254e4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setUp",
            "overrides": {
              "id": 35898,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "781:8:48"
            },
            "parameters": {
              "id": 35897,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "771:2:48"
            },
            "returnParameters": {
              "id": 35899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "790:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 35951,
            "nodeType": "FunctionDefinition",
            "src": "1111:105:48",
            "body": {
              "id": 35950,
              "nodeType": "Block",
              "src": "1151:65:48",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 35944,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "1170:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          },
                          "id": 35945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "DUST_AMOUNT",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 30349,
                          "src": "1170:24:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 35946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1170:26:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "302e3036",
                        "id": 35947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1198:10:48",
                        "subdenomination": "ether",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_60000000000000000_by_1",
                          "typeString": "int_const 60000000000000000"
                        },
                        "value": "0.06"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_60000000000000000_by_1",
                          "typeString": "int_const 60000000000000000"
                        }
                      ],
                      "id": 35943,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1161:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 35948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1161:48:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35949,
                  "nodeType": "ExpressionStatement",
                  "src": "1161:48:48"
                }
              ]
            },
            "functionSelector": "302dffbd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_dustAmmountIs006",
            "parameters": {
              "id": 35941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1141:2:48"
            },
            "returnParameters": {
              "id": 35942,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1151:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 35985,
            "nodeType": "FunctionDefinition",
            "src": "1222:323:48",
            "body": {
              "id": 35984,
              "nodeType": "Block",
              "src": "1267:278:48",
              "statements": [
                {
                  "assignments": [
                    35955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 35955,
                      "mutability": "mutable",
                      "name": "zeroReceiver",
                      "nodeType": "VariableDeclaration",
                      "scope": 35984,
                      "src": "1277:20:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 35954,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1277:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 35960,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 35958,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1308:1:48",
                        "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": 35957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1300:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 35956,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1300:7:48",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 35959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1300:10:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1277:33:48"
                },
                {
                  "assignments": [
                    35962
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 35962,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 35984,
                      "src": "1320:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 35961,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1320:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 35964,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 35963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1337:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1320:20:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "217265636970",
                        "id": 35968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1366:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2e0c3249efa7ab9076bbebcf16dbdd7f0a3f271725c707b05bd754b2ca237ca",
                          "typeString": "literal_string \"!recip\""
                        },
                        "value": "!recip"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_a2e0c3249efa7ab9076bbebcf16dbdd7f0a3f271725c707b05bd754b2ca237ca",
                          "typeString": "literal_string \"!recip\""
                        }
                      ],
                      "expression": {
                        "id": 35965,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "1350:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 35967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "1350:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 35969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1350:25:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35970,
                  "nodeType": "ExpressionStatement",
                  "src": "1350:25:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 35976,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "1424:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 35975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1416:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 35974,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1416:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 35977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1416:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 35978,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35962,
                        "src": "1449:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 35979,
                        "name": "receiverDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35879,
                        "src": "1469:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 35980,
                        "name": "zeroReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35955,
                        "src": "1497:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 35981,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1523:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 35971,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "1385:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 35973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "send",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30550,
                      "src": "1385:17:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,uint32,bytes32,bool) external"
                      }
                    },
                    "id": 35982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1385:153:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 35983,
                  "nodeType": "ExpressionStatement",
                  "src": "1385:153:48"
                }
              ]
            },
            "functionSelector": "80250bb6",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_sendFailZeroRecipient",
            "parameters": {
              "id": 35952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1257:2:48"
            },
            "returnParameters": {
              "id": 35953,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1267:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 35999,
            "nodeType": "EventDefinition",
            "src": "1551:192:48",
            "anonymous": false,
            "name": "Send",
            "parameters": {
              "id": 35998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 35987,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1571:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1571:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35989,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1602:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 35988,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1602:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35991,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "toDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1632:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 35990,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1632:6:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35993,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "toId",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1665:12:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 35992,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1665:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35995,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1687:14:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35994,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1687:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 35997,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "fastLiquidityEnabled",
                  "nodeType": "VariableDeclaration",
                  "scope": 35999,
                  "src": "1711:25:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 35996,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1711:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1561:181:48"
            }
          },
          {
            "id": 36037,
            "nodeType": "FunctionDefinition",
            "src": "1749:391:48",
            "body": {
              "id": 36036,
              "nodeType": "Block",
              "src": "1798:342:48",
              "statements": [
                {
                  "assignments": [
                    36003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36003,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36036,
                      "src": "1808:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36002,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36005,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1825:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:20:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36009,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "1852:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36006,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "1838:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "1838:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 36010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1838:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36011,
                  "nodeType": "ExpressionStatement",
                  "src": "1838:26:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                        "id": 36015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1890:42:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                        },
                        "value": "ERC20: transfer amount exceeds allowance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                        }
                      ],
                      "expression": {
                        "id": 36012,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "1874:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "1874:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 36016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1874:59:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36017,
                  "nodeType": "ExpressionStatement",
                  "src": "1874:59:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36023,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "1982:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1974:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36021,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1974:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1974:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36025,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36003,
                        "src": "2007:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36026,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42191,
                        "src": "2027:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36027,
                        "name": "tokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35877,
                        "src": "2052:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36028,
                        "name": "fastLiquidityEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35883,
                        "src": "2079:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 36018,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "1943:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "send",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30550,
                      "src": "1943:17:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,uint32,bytes32,bool) external"
                      }
                    },
                    "id": 36029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1943:166:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36030,
                  "nodeType": "ExpressionStatement",
                  "src": "1943:166:48"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36031,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2119:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stopPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6462,
                      "src": "2119:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 36034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2119:14:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36035,
                  "nodeType": "ExpressionStatement",
                  "src": "2119:14:48"
                }
              ]
            },
            "functionSelector": "5af8d62e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_sendLocalTokenFailApprove",
            "parameters": {
              "id": 36000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1788:2:48"
            },
            "returnParameters": {
              "id": 36001,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1798:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36099,
            "nodeType": "FunctionDefinition",
            "src": "2146:640:48",
            "body": {
              "id": 36098,
              "nodeType": "Block",
              "src": "2192:594:48",
              "statements": [
                {
                  "assignments": [
                    36041
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36041,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36098,
                      "src": "2202:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36040,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2202:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36043,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2219:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2202:20:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36047,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "2246:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36044,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2232:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "2232:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 36048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2232:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36049,
                  "nodeType": "ExpressionStatement",
                  "src": "2232:26:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36055,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "2295:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2287:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36053,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2287:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2287:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36057,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36041,
                        "src": "2310:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36050,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "2268:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27099,
                      "src": "2268:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 36058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2268:49:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36059,
                  "nodeType": "ExpressionStatement",
                  "src": "2268:49:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "73656e64732074656d706f726172696c792064697361626c6564",
                        "id": 36063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2343:28:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        },
                        "value": "sends temporarily disabled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        }
                      ],
                      "expression": {
                        "id": 36060,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2327:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "2327:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 36064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2327:45:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36065,
                  "nodeType": "ExpressionStatement",
                  "src": "2327:45:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36071,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "2421:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2413:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36069,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2413:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2413:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36073,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36041,
                        "src": "2446:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36074,
                        "name": "receiverDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35879,
                        "src": "2466:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36075,
                        "name": "tokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35877,
                        "src": "2494:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36076,
                        "name": "fastLiquidityEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35883,
                        "src": "2521:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 36066,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "2382:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "send",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30550,
                      "src": "2382:17:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,uint32,bytes32,bool) external"
                      }
                    },
                    "id": 36077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2382:169:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36078,
                  "nodeType": "ExpressionStatement",
                  "src": "2382:169:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "73656e64732074656d706f726172696c792064697361626c6564",
                        "id": 36082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2577:28:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        },
                        "value": "sends temporarily disabled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        }
                      ],
                      "expression": {
                        "id": 36079,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2561:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "2561:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 36083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2561:45:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36084,
                  "nodeType": "ExpressionStatement",
                  "src": "2561:45:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36090,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "2661:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2653:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36088,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2653:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2653:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36092,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36041,
                        "src": "2686:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36093,
                        "name": "receiverDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35879,
                        "src": "2706:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36094,
                        "name": "tokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35877,
                        "src": "2734:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "307831323334",
                        "id": 36095,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2761:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8",
                          "typeString": "literal_string \"0x1234\""
                        },
                        "value": "0x1234"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8",
                          "typeString": "literal_string \"0x1234\""
                        }
                      ],
                      "expression": {
                        "id": 36085,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "2616:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendToHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30624,
                      "src": "2616:23:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint32,bytes32,bytes memory) external"
                      }
                    },
                    "id": 36096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2616:163:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36097,
                  "nodeType": "ExpressionStatement",
                  "src": "2616:163:48"
                }
              ]
            },
            "functionSelector": "4d56de54",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_sendLocalTokenDisabled",
            "parameters": {
              "id": 36038,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2182:2:48"
            },
            "returnParameters": {
              "id": 36039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2192:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36166,
            "nodeType": "FunctionDefinition",
            "src": "2792:777:48",
            "body": {
              "id": 36165,
              "nodeType": "Block",
              "src": "2833:736:48",
              "statements": [
                {
                  "assignments": [
                    36103
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36103,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36165,
                      "src": "2843:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36102,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2843:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36105,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2860:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2843:20:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36109,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "2887:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36106,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2873:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "2873:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 36110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2873:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36111,
                  "nodeType": "ExpressionStatement",
                  "src": "2873:26:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36117,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "3007:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2999:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36115,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2999:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2999:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36119,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36103,
                        "src": "3022:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36112,
                        "name": "remoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35885,
                        "src": "2979:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_BridgeToken_$31661",
                          "typeString": "contract BridgeToken"
                        }
                      },
                      "id": 36114,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42853,
                      "src": "2979:19:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 36120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:50:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36121,
                  "nodeType": "ExpressionStatement",
                  "src": "2979:50:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3115:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3121:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3127:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3133:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36131,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "3147:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3139:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36129,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3139:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3139:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 36122,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3101:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "3101:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3101:60:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36134,
                  "nodeType": "ExpressionStatement",
                  "src": "3101:60:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36138,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35885,
                            "src": "3202:11:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          ],
                          "id": 36137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3194:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36136,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3194:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3194:20:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36140,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "3228:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36141,
                        "name": "receiverDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35879,
                        "src": "3253:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36142,
                        "name": "tokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35877,
                        "src": "3281:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36143,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36103,
                        "src": "3308:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36144,
                        "name": "fastLiquidityEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35883,
                        "src": "3328:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 36135,
                      "name": "Send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 35999,
                      "src": "3176:4:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes32_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint32,bytes32,uint256,bool)"
                      }
                    },
                    "id": 36145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3176:182:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36146,
                  "nodeType": "EmitStatement",
                  "src": "3171:187:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36152,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35885,
                            "src": "3407:11:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          ],
                          "id": 36151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3399:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36150,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3399:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3399:20:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36154,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36103,
                        "src": "3433:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36155,
                        "name": "receiverDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35879,
                        "src": "3453:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36156,
                        "name": "tokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35877,
                        "src": "3481:13:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36157,
                        "name": "fastLiquidityEnabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35883,
                        "src": "3508:20:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 36147,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "3368:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "send",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30550,
                      "src": "3368:17:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,uint32,bytes32,bool) external"
                      }
                    },
                    "id": 36158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3368:170:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36159,
                  "nodeType": "ExpressionStatement",
                  "src": "3368:170:48"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36160,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3548:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stopPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6462,
                      "src": "3548:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 36163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3548:14:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36164,
                  "nodeType": "ExpressionStatement",
                  "src": "3548:14:48"
                }
              ]
            },
            "functionSelector": "f82821c9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_sendRemoteSuccess",
            "parameters": {
              "id": 36100,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2823:2:48"
            },
            "returnParameters": {
              "id": 36101,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2833:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36174,
            "nodeType": "EventDefinition",
            "src": "3575:72:48",
            "anonymous": false,
            "name": "Transfer",
            "parameters": {
              "id": 36173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36168,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 36174,
                  "src": "3590:20:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3590:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36170,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 36174,
                  "src": "3612:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36169,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3612:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36172,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 36174,
                  "src": "3632:13:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 36171,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3632:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3589:57:48"
            }
          },
          {
            "id": 36182,
            "nodeType": "EventDefinition",
            "src": "3652:108:48",
            "anonymous": false,
            "name": "Approval",
            "parameters": {
              "id": 36181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36176,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 36182,
                  "src": "3676:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36175,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3676:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36178,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 36182,
                  "src": "3707:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3707:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36180,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 36182,
                  "src": "3740:13:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 36179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3740:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3666:93:48"
            }
          },
          {
            "id": 36292,
            "nodeType": "FunctionDefinition",
            "src": "3766:819:48",
            "body": {
              "id": 36291,
              "nodeType": "Block",
              "src": "3812:773:48",
              "statements": [
                {
                  "assignments": [
                    36186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36186,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36291,
                      "src": "3822:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36185,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3822:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36188,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3839:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3822:20:48"
                },
                {
                  "assignments": [
                    36190
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36190,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 36291,
                      "src": "3852:23:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36189,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3852:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36198,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36195,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "3907:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3899:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36193,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3899:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3899:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 36191,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "3878:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36192,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27039,
                      "src": "3878:20:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 36197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3878:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3852:69:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3945:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3951:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 36204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3957:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3964:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36208,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "3978:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3970:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36206,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3970:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3970:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36199,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3931:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "3931:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3931:59:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36211,
                  "nodeType": "ExpressionStatement",
                  "src": "3931:59:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 36213,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "4014:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 36216,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "4035:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4027:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36214,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4027:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4027:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36218,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36186,
                        "src": "4050:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36212,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36182,
                      "src": "4005:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 36219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4005:52:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36220,
                  "nodeType": "EmitStatement",
                  "src": "4000:57:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36224,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "4151:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36221,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4137:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "4137:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 36225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4137:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36226,
                  "nodeType": "ExpressionStatement",
                  "src": "4137:26:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36232,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "4200:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4192:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36230,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4192:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4192:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36234,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36186,
                        "src": "4215:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36227,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "4173:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27099,
                      "src": "4173:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 36235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4173:49:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36236,
                  "nodeType": "ExpressionStatement",
                  "src": "4173:49:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4246:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36241,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4252:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 36242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4258:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4265:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36246,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "4279:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4271:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36244,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4271:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4271:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36237,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4232:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "4232:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4232:59:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36249,
                  "nodeType": "ExpressionStatement",
                  "src": "4232:59:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 36251,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "4315:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 36254,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "4336:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4328:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36252,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4328:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36255,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4328:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36256,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36186,
                        "src": "4351:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36250,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36174,
                      "src": "4306:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 36257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4306:52:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36258,
                  "nodeType": "EmitStatement",
                  "src": "4301:57:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36264,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "4400:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4392:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36262,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4392:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4392:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36266,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36186,
                        "src": "4413:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36259,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "4368:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "takeTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 41957,
                      "src": "4368:23:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) external returns (bytes29,bytes32)"
                      }
                    },
                    "id": 36267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4368:52:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "id": 36268,
                  "nodeType": "ExpressionStatement",
                  "src": "4368:52:48"
                },
                {
                  "assignments": [
                    36270
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36270,
                      "mutability": "mutable",
                      "name": "afterBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 36291,
                      "src": "4430:20:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36269,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4430:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36278,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36275,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "4482:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4474:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36273,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4474:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4474:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 36271,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "4453:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27039,
                      "src": "4453:20:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 36277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4453:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4430:66:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36280,
                        "name": "afterBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36270,
                        "src": "4515:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 36283,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 36281,
                          "name": "startingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36190,
                          "src": "4529:15:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 36282,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36186,
                          "src": "4547:6:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4529:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36279,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "4506:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 36284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4506:48:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36285,
                  "nodeType": "ExpressionStatement",
                  "src": "4506:48:48"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36286,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4564:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stopPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6462,
                      "src": "4564:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 36289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4564:14:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36290,
                  "nodeType": "ExpressionStatement",
                  "src": "4564:14:48"
                }
              ]
            },
            "functionSelector": "fdd276a8",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_takeTokensLocalSuccess",
            "parameters": {
              "id": 36183,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3802:2:48"
            },
            "returnParameters": {
              "id": 36184,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3812:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36316,
            "nodeType": "FunctionDefinition",
            "src": "4591:184:48",
            "body": {
              "id": 36315,
              "nodeType": "Block",
              "src": "4644:131:48",
              "statements": [
                {
                  "assignments": [
                    36296
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36296,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36315,
                      "src": "4654:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36295,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4654:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36298,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 36297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4671:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4654:18:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "21616d6e74",
                        "id": 36302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4698:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_68b2b497b71cd104f16a8d4f119b234b325c9481ae87c628408fd4cd4c964eac",
                          "typeString": "literal_string \"!amnt\""
                        },
                        "value": "!amnt"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_68b2b497b71cd104f16a8d4f119b234b325c9481ae87c628408fd4cd4c964eac",
                          "typeString": "literal_string \"!amnt\""
                        }
                      ],
                      "expression": {
                        "id": 36299,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4682:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "4682:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 36303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4682:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36304,
                  "nodeType": "ExpressionStatement",
                  "src": "4682:24:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36310,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "4748:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4740:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36308,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4740:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4740:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36312,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36296,
                        "src": "4761:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36305,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "4716:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "takeTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 41957,
                      "src": "4716:23:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) external returns (bytes29,bytes32)"
                      }
                    },
                    "id": 36313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4716:52:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "id": 36314,
                  "nodeType": "ExpressionStatement",
                  "src": "4716:52:48"
                }
              ]
            },
            "functionSelector": "e4273f0c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_takeTokensLocalFailZeroAmount",
            "parameters": {
              "id": 36293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4634:2:48"
            },
            "returnParameters": {
              "id": 36294,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4644:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36420,
            "nodeType": "FunctionDefinition",
            "src": "4781:793:48",
            "body": {
              "id": 36419,
              "nodeType": "Block",
              "src": "4828:746:48",
              "statements": [
                {
                  "assignments": [
                    36320
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36320,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36419,
                      "src": "4838:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36319,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4838:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36322,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4855:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4838:20:48"
                },
                {
                  "assignments": [
                    36324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36324,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 36419,
                      "src": "4868:23:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36323,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4868:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36329,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 36327,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "4916:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36325,
                        "name": "remoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35885,
                        "src": "4894:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_BridgeToken_$31661",
                          "typeString": "contract BridgeToken"
                        }
                      },
                      "id": 36326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31569,
                      "src": "4894:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 36328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4894:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4868:60:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36333,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "4952:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36330,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4938:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "4938:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 36334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4938:26:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36335,
                  "nodeType": "ExpressionStatement",
                  "src": "4938:26:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4988:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4994:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 36341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5000:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5007:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36345,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "5021:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36344,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5013:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36343,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5013:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5013:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36336,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4974:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "4974:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4974:59:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36348,
                  "nodeType": "ExpressionStatement",
                  "src": "4974:59:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 36350,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "5057:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 36353,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "5078:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5070:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36351,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5070:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5070:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36355,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36320,
                        "src": "5093:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36349,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36182,
                      "src": "5048:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 36356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5048:52:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36357,
                  "nodeType": "EmitStatement",
                  "src": "5043:57:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36363,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "5207:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5199:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36361,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5199:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36364,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5199:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36365,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36320,
                        "src": "5222:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36358,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "5180:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27099,
                      "src": "5180:18:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 36366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5180:49:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36367,
                  "nodeType": "ExpressionStatement",
                  "src": "5180:49:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5253:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5259:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 36373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5265:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5272:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36377,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35885,
                            "src": "5286:11:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          ],
                          "id": 36376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5278:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36375,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5278:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5278:20:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36368,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "5239:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "5239:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5239:60:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36380,
                  "nodeType": "ExpressionStatement",
                  "src": "5239:60:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 36382,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "5323:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 36385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5344:1:48",
                            "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": 36384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5336:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36383,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5336:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5336:10:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36387,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36320,
                        "src": "5348:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36381,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36174,
                      "src": "5314:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 36388,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5314:41:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36389,
                  "nodeType": "EmitStatement",
                  "src": "5309:46:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36395,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35885,
                            "src": "5397:11:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          ],
                          "id": 36394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5389:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36393,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5389:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36396,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5389:20:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36397,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36320,
                        "src": "5411:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36390,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "5365:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "takeTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 41957,
                      "src": "5365:23:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) external returns (bytes29,bytes32)"
                      }
                    },
                    "id": 36398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5365:53:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "id": 36399,
                  "nodeType": "ExpressionStatement",
                  "src": "5365:53:48"
                },
                {
                  "assignments": [
                    36401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36401,
                      "mutability": "mutable",
                      "name": "afterBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 36419,
                      "src": "5428:20:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36400,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5428:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36406,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 36404,
                        "name": "tokenSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35875,
                        "src": "5473:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36402,
                        "name": "remoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 35885,
                        "src": "5451:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_BridgeToken_$31661",
                          "typeString": "contract BridgeToken"
                        }
                      },
                      "id": 36403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31569,
                      "src": "5451:21:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 36405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5451:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5428:57:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36408,
                        "name": "afterBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36401,
                        "src": "5504:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 36411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 36409,
                          "name": "startingBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36324,
                          "src": "5518:15:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 36410,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 36320,
                          "src": "5536:6:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5518:24:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36407,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "5495:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 36412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5495:48:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36413,
                  "nodeType": "ExpressionStatement",
                  "src": "5495:48:48"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36414,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "5553:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stopPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6462,
                      "src": "5553:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 36417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5553:14:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36418,
                  "nodeType": "ExpressionStatement",
                  "src": "5553:14:48"
                }
              ]
            },
            "functionSelector": "6def0727",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_takeTokensRemoteSuccess",
            "parameters": {
              "id": 36317,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4818:2:48"
            },
            "returnParameters": {
              "id": 36318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4828:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36454,
            "nodeType": "FunctionDefinition",
            "src": "5580:262:48",
            "body": {
              "id": 36453,
              "nodeType": "Block",
              "src": "5624:218:48",
              "statements": [
                {
                  "assignments": [
                    36426
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36426,
                      "mutability": "mutable",
                      "name": "affected",
                      "nodeType": "VariableDeclaration",
                      "scope": 36453,
                      "src": "5634:35:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                        "typeString": "address payable[14]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 36423,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5634:15:48",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 36425,
                        "length": {
                          "hexValue": "3134",
                          "id": 36424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5650:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_14_by_1",
                            "typeString": "int_const 14"
                          },
                          "value": "14"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "5634:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_storage_ptr",
                          "typeString": "address payable[14]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36430,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36427,
                        "name": "mockAccountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42199,
                        "src": "5672:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockAccountant_$42565",
                          "typeString": "contract MockAccountant"
                        }
                      },
                      "id": 36428,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "affectedAssets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42564,
                      "src": "5672:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$__$returns$_t_array$_t_address_payable_$14_memory_ptr_$",
                        "typeString": "function () pure external returns (address payable[14] memory)"
                      }
                    },
                    "id": 36429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5672:31:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                      "typeString": "address payable[14] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5634:69:48"
                },
                {
                  "body": {
                    "id": 36451,
                    "nodeType": "Block",
                    "src": "5759:77:48",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 36445,
                                    "name": "affected",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 36426,
                                    "src": "5812:8:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                                      "typeString": "address payable[14] memory"
                                    }
                                  },
                                  "id": 36447,
                                  "indexExpression": {
                                    "id": 36446,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 36432,
                                    "src": "5821:1:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5812:11:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "expression": {
                                  "id": 36443,
                                  "name": "mockAccountant",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42199,
                                  "src": "5781:14:48",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_MockAccountant_$42565",
                                    "typeString": "contract MockAccountant"
                                  }
                                },
                                "id": 36444,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isAffectedAsset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 42538,
                                "src": "5781:30:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_pure$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) pure external returns (bool)"
                                }
                              },
                              "id": 36448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5781:43:48",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 36442,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5773:7:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 36449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5773:52:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36450,
                        "nodeType": "ExpressionStatement",
                        "src": "5773:52:48"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 36438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 36435,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36432,
                      "src": "5733:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 36436,
                        "name": "affected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36426,
                        "src": "5737:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                          "typeString": "address payable[14] memory"
                        }
                      },
                      "id": 36437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5737:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5733:19:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36452,
                  "initializationExpression": {
                    "assignments": [
                      36432
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 36432,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 36452,
                        "src": "5718:9:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 36431,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5718:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 36434,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 36433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5730:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5718:13:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 36440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5754:3:48",
                      "subExpression": {
                        "id": 36439,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36432,
                        "src": "5754:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 36441,
                    "nodeType": "ExpressionStatement",
                    "src": "5754:3:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "5713:123:48"
                }
              ]
            },
            "functionSelector": "18bab5b7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_isAffectedAsset",
            "parameters": {
              "id": 36421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5609:2:48"
            },
            "returnParameters": {
              "id": 36422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5624:0:48"
            },
            "scope": 36901,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36462,
            "nodeType": "EventDefinition",
            "src": "5848:115:48",
            "anonymous": false,
            "name": "MockAcctCalled",
            "parameters": {
              "id": 36461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 36456,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 36462,
                  "src": "5878:22:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5878:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36458,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 36462,
                  "src": "5910:21:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 36457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5910:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 36460,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 36462,
                  "src": "5941:15:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 36459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5941:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5868:94:48"
            }
          },
          {
            "id": 36576,
            "nodeType": "FunctionDefinition",
            "src": "5969:1042:48",
            "body": {
              "id": 36575,
              "nodeType": "Block",
              "src": "6012:999:48",
              "statements": [
                {
                  "assignments": [
                    36466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36466,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36575,
                      "src": "6022:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36465,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6022:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36468,
                  "initialValue": {
                    "hexValue": "31303030",
                    "id": 36467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6039:4:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000_by_1",
                      "typeString": "int_const 1000"
                    },
                    "value": "1000"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6022:21:48"
                },
                {
                  "assignments": [
                    36470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36470,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 36575,
                      "src": "6053:17:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 36469,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6053:7:48",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36475,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "3333",
                        "id": 36473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6081:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_33_by_1",
                          "typeString": "int_const 33"
                        },
                        "value": "33"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_33_by_1",
                          "typeString": "int_const 33"
                        }
                      ],
                      "id": 36472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6073:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 36471,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6073:7:48",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 36474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6073:11:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6053:31:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36481,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "6150:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6142:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36479,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6142:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6142:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36483,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36466,
                        "src": "6165:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36476,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "6126:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26890,
                      "src": "6126:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 36484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6126:46:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36485,
                  "nodeType": "ExpressionStatement",
                  "src": "6126:46:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 36489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6196:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36490,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6202:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 36491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6208:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 36492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6215:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 36495,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "6229:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6221:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36493,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6221:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6221:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36486,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "6182:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "6182:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 36497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6182:59:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36498,
                  "nodeType": "ExpressionStatement",
                  "src": "6182:59:48"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36502,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "6273:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6265:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36500,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6265:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6265:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36504,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36470,
                        "src": "6288:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36505,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36466,
                        "src": "6299:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 36499,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36174,
                      "src": "6256:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 36506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6256:50:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36507,
                  "nodeType": "EmitStatement",
                  "src": "6251:55:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36513,
                            "name": "localToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42215,
                            "src": "6347:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                              "typeString": "contract ERC20Mock"
                            }
                          ],
                          "id": 36512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6339:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36511,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6339:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6339:19:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 36515,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36466,
                        "src": "6360:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36516,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36470,
                        "src": "6368:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 36508,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "6316:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "giveLocal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 41989,
                      "src": "6316:22:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,address) external"
                      }
                    },
                    "id": 36517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6316:62:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36518,
                  "nodeType": "ExpressionStatement",
                  "src": "6316:62:48"
                },
                {
                  "assignments": [
                    36522
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36522,
                      "mutability": "mutable",
                      "name": "affected",
                      "nodeType": "VariableDeclaration",
                      "scope": 36575,
                      "src": "6537:35:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                        "typeString": "address payable[14]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 36519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6537:15:48",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 36521,
                        "length": {
                          "hexValue": "3134",
                          "id": 36520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6553:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_14_by_1",
                            "typeString": "int_const 14"
                          },
                          "value": "14"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "6537:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_storage_ptr",
                          "typeString": "address payable[14]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36526,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36523,
                        "name": "mockAccountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42199,
                        "src": "6575:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockAccountant_$42565",
                          "typeString": "contract MockAccountant"
                        }
                      },
                      "id": 36524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "affectedAssets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42564,
                      "src": "6575:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$__$returns$_t_array$_t_address_payable_$14_memory_ptr_$",
                        "typeString": "function () pure external returns (address payable[14] memory)"
                      }
                    },
                    "id": 36525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6575:31:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                      "typeString": "address payable[14] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6537:69:48"
                },
                {
                  "body": {
                    "id": 36573,
                    "nodeType": "Block",
                    "src": "6662:343:48",
                    "statements": [
                      {
                        "assignments": [
                          36539
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 36539,
                            "mutability": "mutable",
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 36573,
                            "src": "6676:9:48",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 36538,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6676:7:48",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 36543,
                        "initialValue": {
                          "baseExpression": {
                            "id": 36540,
                            "name": "affected",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36522,
                            "src": "6688:8:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                              "typeString": "address payable[14] memory"
                            }
                          },
                          "id": 36542,
                          "indexExpression": {
                            "id": 36541,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36528,
                            "src": "6697:1:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6688:11:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6676:23:48"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "74727565",
                              "id": 36547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6744:4:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "hexValue": "74727565",
                              "id": 36548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6766:4:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "hexValue": "66616c7365",
                              "id": 36549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6788:5:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "hexValue": "74727565",
                              "id": 36550,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6811:4:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 36553,
                                      "name": "bridgeRouter",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 42203,
                                      "src": "6841:12:48",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                                        "typeString": "contract EthereumBridgeRouterHarness"
                                      }
                                    },
                                    "id": 36554,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "accountant",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 31132,
                                    "src": "6841:23:48",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IEventAccountant_$33635_$",
                                      "typeString": "function () view external returns (contract IEventAccountant)"
                                    }
                                  },
                                  "id": 36555,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6841:25:48",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                    "typeString": "contract IEventAccountant"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                    "typeString": "contract IEventAccountant"
                                  }
                                ],
                                "id": 36552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6833:7:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 36551,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6833:7:48",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 36556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6833:34:48",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 36544,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1816,
                              "src": "6713:2:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vm_$6909",
                                "typeString": "contract Vm"
                              }
                            },
                            "id": 36546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "expectEmit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6527,
                            "src": "6713:13:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                              "typeString": "function (bool,bool,bool,bool,address) external"
                            }
                          },
                          "id": 36557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6713:168:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36558,
                        "nodeType": "ExpressionStatement",
                        "src": "6713:168:48"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 36560,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36539,
                              "src": "6915:1:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 36561,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36470,
                              "src": "6918:9:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 36562,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36466,
                              "src": "6929:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 36559,
                            "name": "MockAcctCalled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 36462,
                            "src": "6900:14:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 36563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6900:36:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36564,
                        "nodeType": "EmitStatement",
                        "src": "6895:41:48"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 36568,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36539,
                              "src": "6973:1:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 36569,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36466,
                              "src": "6976:6:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 36570,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 36470,
                              "src": "6984:9:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 36565,
                              "name": "bridgeRouter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42203,
                              "src": "6950:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                                "typeString": "contract EthereumBridgeRouterHarness"
                              }
                            },
                            "id": 36567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "giveLocal",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 41989,
                            "src": "6950:22:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address) external"
                            }
                          },
                          "id": 36571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6950:44:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36572,
                        "nodeType": "ExpressionStatement",
                        "src": "6950:44:48"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 36534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 36531,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36528,
                      "src": "6636:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 36532,
                        "name": "affected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36522,
                        "src": "6640:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                          "typeString": "address payable[14] memory"
                        }
                      },
                      "id": 36533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6640:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6636:19:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36574,
                  "initializationExpression": {
                    "assignments": [
                      36528
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 36528,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 36574,
                        "src": "6621:9:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 36527,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6621:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 36530,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 36529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6633:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6621:13:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 36536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6657:3:48",
                      "subExpression": {
                        "id": 36535,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36528,
                        "src": "6657:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 36537,
                    "nodeType": "ExpressionStatement",
                    "src": "6657:3:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "6616:389:48"
                }
              ]
            },
            "functionSelector": "0f8c829b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_giveLocalUnaffected",
            "parameters": {
              "id": 36463,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6002:2:48"
            },
            "returnParameters": {
              "id": 36464,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6012:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36670,
            "nodeType": "FunctionDefinition",
            "src": "7017:973:48",
            "body": {
              "id": 36669,
              "nodeType": "Block",
              "src": "7084:906:48",
              "statements": [
                {
                  "assignments": [
                    36580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36580,
                      "mutability": "mutable",
                      "name": "hook",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7094:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36579,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7094:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36587,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 36583,
                            "name": "revertingToHook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35887,
                            "src": "7117:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          ],
                          "id": 36582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7109:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36581,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7109:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7109:24:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 36585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "7109:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7109:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7094:58:48"
                },
                {
                  "assignments": [
                    36589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36589,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7162:19:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36588,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7162:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36591,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7184:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7162:25:48"
                },
                {
                  "assignments": [
                    36593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36593,
                      "mutability": "mutable",
                      "name": "tokenDetailsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7197:24:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36592,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7197:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36595,
                  "initialValue": {
                    "hexValue": "736466",
                    "id": 36594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7224:5:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b215b7580e0ceec6dac6a80923de3474ec47153df96010eca11eddbd3fcdfb12",
                      "typeString": "literal_string \"sdf\""
                    },
                    "value": "sdf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7197:32:48"
                },
                {
                  "assignments": [
                    36597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36597,
                      "mutability": "mutable",
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7239:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36596,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7239:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36604,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "hexValue": "307842454546",
                            "id": 36600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7264:6:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            },
                            "value": "0xBEEF"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            }
                          ],
                          "id": 36599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7256:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36598,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7256:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36601,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7256:15:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 36602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "7256:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7256:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7239:51:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36610,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "7324:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7316:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36608,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7316:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7316:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36612,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36589,
                        "src": "7339:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36605,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "7300:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26890,
                      "src": "7300:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 36613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7300:51:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36614,
                  "nodeType": "ExpressionStatement",
                  "src": "7300:51:48"
                },
                {
                  "assignments": [
                    36616
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36616,
                      "mutability": "mutable",
                      "name": "extraData",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7361:22:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36615,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7361:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36618,
                  "initialValue": {
                    "hexValue": "736466647366",
                    "id": 36617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7386:8:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b0876586ac380dc3e684f13944e8e5ed07181c8454dbb3723cfe05797aea8202",
                      "typeString": "literal_string \"sdfdsf\""
                    },
                    "value": "sdfdsf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7361:33:48"
                },
                {
                  "assignments": [
                    36620
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36620,
                      "mutability": "mutable",
                      "name": "action",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7404:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36619,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7404:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36632,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 36623,
                            "name": "BridgeMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30301,
                            "src": "7456:13:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                              "typeString": "type(library BridgeMessage)"
                            }
                          },
                          "id": 36624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Types",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29620,
                          "src": "7456:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                            "typeString": "type(enum BridgeMessage.Types)"
                          }
                        },
                        "id": 36625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "TransferToHook",
                        "nodeType": "MemberAccess",
                        "src": "7456:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      },
                      {
                        "id": 36626,
                        "name": "hook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36580,
                        "src": "7504:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36627,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36589,
                        "src": "7522:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36628,
                        "name": "tokenDetailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36593,
                        "src": "7547:16:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36629,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36597,
                        "src": "7577:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36630,
                        "name": "extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36616,
                        "src": "7597:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36621,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "7426:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36622,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "7426:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7426:190:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7404:212:48"
                },
                {
                  "assignments": [
                    36634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36634,
                      "mutability": "mutable",
                      "name": "origin",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7626:13:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36633,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7626:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36636,
                  "initialValue": {
                    "hexValue": "313233",
                    "id": 36635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7642:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_123_by_1",
                      "typeString": "int_const 123"
                    },
                    "value": "123"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7626:19:48"
                },
                {
                  "assignments": [
                    36638
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36638,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7655:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36637,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7655:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36640,
                  "initialValue": {
                    "hexValue": "3130",
                    "id": 36639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7670:2:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10_by_1",
                      "typeString": "int_const 10"
                    },
                    "value": "10"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7655:17:48"
                },
                {
                  "assignments": [
                    36642
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36642,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 36669,
                      "src": "7682:20:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36641,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7682:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36653,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 36645,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42191,
                        "src": "7735:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 36648,
                                "name": "localToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42215,
                                "src": "7768:10:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              ],
                              "id": 36647,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7760:7:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 36646,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7760:7:48",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 36649,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7760:19:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 36650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46325,
                          "src": "7760:36:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 36651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7760:38:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 36643,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "7705:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "7705:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7705:103:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7682:126:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f706521",
                        "id": 36657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7834:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_602220581b0499081ee1ce9a0bc4aa2f362f8c8592a23f7cf2b39c3b2f8e2c45",
                          "typeString": "literal_string \"nope!\""
                        },
                        "value": "nope!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_602220581b0499081ee1ce9a0bc4aa2f362f8c8592a23f7cf2b39c3b2f8e2c45",
                          "typeString": "literal_string \"nope!\""
                        }
                      ],
                      "expression": {
                        "id": 36654,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "7818:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "7818:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 36658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7818:24:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36659,
                  "nodeType": "ExpressionStatement",
                  "src": "7818:24:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36663,
                        "name": "origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36634,
                        "src": "7907:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36664,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36638,
                        "src": "7927:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36665,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36642,
                        "src": "7946:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 36666,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36620,
                        "src": "7967:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36660,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "7852:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36662,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_handleTransferToHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42032,
                      "src": "7852:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_uint32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes memory,bytes memory) external"
                      }
                    },
                    "id": 36667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7852:131:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36668,
                  "nodeType": "ExpressionStatement",
                  "src": "7852:131:48"
                }
              ]
            },
            "functionSelector": "2c02f67a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_handleHookTransferRevertsIfCallFailsMessage",
            "parameters": {
              "id": 36577,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7074:2:48"
            },
            "returnParameters": {
              "id": 36578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7084:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36763,
            "nodeType": "FunctionDefinition",
            "src": "7996:968:48",
            "body": {
              "id": 36762,
              "nodeType": "Block",
              "src": "8065:899:48",
              "statements": [
                {
                  "assignments": [
                    36674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36674,
                      "mutability": "mutable",
                      "name": "hook",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8075:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36673,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8075:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36681,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 36677,
                            "name": "revertingToHook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35887,
                            "src": "8098:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          ],
                          "id": 36676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8090:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36675,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8090:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8090:24:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 36679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "8090:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8090:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8075:58:48"
                },
                {
                  "assignments": [
                    36683
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36683,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8143:19:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36682,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8143:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36685,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8165:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8143:25:48"
                },
                {
                  "assignments": [
                    36687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36687,
                      "mutability": "mutable",
                      "name": "tokenDetailsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8178:24:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36686,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8178:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36689,
                  "initialValue": {
                    "hexValue": "736466",
                    "id": 36688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8205:5:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b215b7580e0ceec6dac6a80923de3474ec47153df96010eca11eddbd3fcdfb12",
                      "typeString": "literal_string \"sdf\""
                    },
                    "value": "sdf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8178:32:48"
                },
                {
                  "assignments": [
                    36691
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36691,
                      "mutability": "mutable",
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8220:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36690,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8220:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36698,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "hexValue": "307842454546",
                            "id": 36694,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8245:6:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            },
                            "value": "0xBEEF"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            }
                          ],
                          "id": 36693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8237:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36692,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8237:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8237:15:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 36696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "8237:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8237:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8220:51:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36704,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "8305:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8297:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36702,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8297:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8297:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36706,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36683,
                        "src": "8320:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36699,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "8281:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26890,
                      "src": "8281:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 36707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8281:51:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36708,
                  "nodeType": "ExpressionStatement",
                  "src": "8281:51:48"
                },
                {
                  "assignments": [
                    36710
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36710,
                      "mutability": "mutable",
                      "name": "extraData",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8342:22:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36709,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8342:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36712,
                  "initialValue": {
                    "hexValue": "736466647366",
                    "id": 36711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8367:8:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b0876586ac380dc3e684f13944e8e5ed07181c8454dbb3723cfe05797aea8202",
                      "typeString": "literal_string \"sdfdsf\""
                    },
                    "value": "sdfdsf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8342:33:48"
                },
                {
                  "assignments": [
                    36714
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36714,
                      "mutability": "mutable",
                      "name": "action",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8385:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36713,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8385:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36726,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 36717,
                            "name": "BridgeMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30301,
                            "src": "8437:13:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                              "typeString": "type(library BridgeMessage)"
                            }
                          },
                          "id": 36718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Types",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29620,
                          "src": "8437:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                            "typeString": "type(enum BridgeMessage.Types)"
                          }
                        },
                        "id": 36719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "TransferToHook",
                        "nodeType": "MemberAccess",
                        "src": "8437:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      },
                      {
                        "id": 36720,
                        "name": "hook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36674,
                        "src": "8485:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36721,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36683,
                        "src": "8503:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36722,
                        "name": "tokenDetailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36687,
                        "src": "8528:16:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36723,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36691,
                        "src": "8558:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36724,
                        "name": "extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36710,
                        "src": "8578:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36715,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "8407:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "8407:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8407:190:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8385:212:48"
                },
                {
                  "assignments": [
                    36728
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36728,
                      "mutability": "mutable",
                      "name": "origin",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8607:13:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36727,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8607:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36730,
                  "initialValue": {
                    "hexValue": "363030",
                    "id": 36729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8623:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_600_by_1",
                      "typeString": "int_const 600"
                    },
                    "value": "600"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8607:19:48"
                },
                {
                  "assignments": [
                    36732
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36732,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8636:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36731,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8636:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36734,
                  "initialValue": {
                    "hexValue": "3130",
                    "id": 36733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8651:2:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10_by_1",
                      "typeString": "int_const 10"
                    },
                    "value": "10"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8636:17:48"
                },
                {
                  "assignments": [
                    36736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36736,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 36762,
                      "src": "8663:20:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36735,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8663:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36747,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 36739,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42191,
                        "src": "8716:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 36742,
                                "name": "localToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42215,
                                "src": "8749:10:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              ],
                              "id": 36741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8741:7:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 36740,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8741:7:48",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 36743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8741:19:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 36744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46325,
                          "src": "8741:36:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 36745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8741:38:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 36737,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "8686:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "8686:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8686:103:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8663:126:48"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36748,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "8799:2:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 36750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6489,
                      "src": "8799:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 36751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8799:17:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36752,
                  "nodeType": "ExpressionStatement",
                  "src": "8799:17:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36756,
                        "name": "origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36728,
                        "src": "8881:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36757,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36732,
                        "src": "8901:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36758,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36736,
                        "src": "8920:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 36759,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36714,
                        "src": "8941:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36753,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "8826:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_handleTransferToHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42032,
                      "src": "8826:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_uint32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes memory,bytes memory) external"
                      }
                    },
                    "id": 36760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8826:131:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36761,
                  "nodeType": "ExpressionStatement",
                  "src": "8826:131:48"
                }
              ]
            },
            "functionSelector": "d1f0b7e0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_handleHookTransferRevertsIfCallFailsNoMessage",
            "parameters": {
              "id": 36671,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8055:2:48"
            },
            "returnParameters": {
              "id": 36672,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8065:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36858,
            "nodeType": "FunctionDefinition",
            "src": "8970:996:48",
            "body": {
              "id": 36857,
              "nodeType": "Block",
              "src": "9020:946:48",
              "statements": [
                {
                  "assignments": [
                    36767
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36767,
                      "mutability": "mutable",
                      "name": "hook",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9030:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36766,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9030:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36774,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 36770,
                            "name": "revertingToHook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35887,
                            "src": "9053:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          ],
                          "id": 36769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9045:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36768,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9045:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9045:24:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 36772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "9045:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9045:43:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9030:58:48"
                },
                {
                  "assignments": [
                    36776
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36776,
                      "mutability": "mutable",
                      "name": "tokenAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9098:19:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 36775,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9098:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36778,
                  "initialValue": {
                    "hexValue": "313030",
                    "id": 36777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9120:3:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100_by_1",
                      "typeString": "int_const 100"
                    },
                    "value": "100"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9098:25:48"
                },
                {
                  "assignments": [
                    36780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36780,
                      "mutability": "mutable",
                      "name": "tokenDetailsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9133:24:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36779,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9133:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36782,
                  "initialValue": {
                    "hexValue": "736466",
                    "id": 36781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9160:5:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b215b7580e0ceec6dac6a80923de3474ec47153df96010eca11eddbd3fcdfb12",
                      "typeString": "literal_string \"sdf\""
                    },
                    "value": "sdf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9133:32:48"
                },
                {
                  "assignments": [
                    36784
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36784,
                      "mutability": "mutable",
                      "name": "sender",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9175:14:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 36783,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9175:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36791,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "hexValue": "307842454546",
                            "id": 36787,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9200:6:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            },
                            "value": "0xBEEF"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_48879_by_1",
                              "typeString": "int_const 48879"
                            }
                          ],
                          "id": 36786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9192:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36785,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9192:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9192:15:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 36789,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressToBytes32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46325,
                      "src": "9192:32:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 36790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9192:34:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9175:51:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 36797,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "9260:12:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 36796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9252:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 36795,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9252:7:48",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 36798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9252:21:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 36799,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36776,
                        "src": "9275:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 36792,
                        "name": "localToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42215,
                        "src": "9236:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                          "typeString": "contract ERC20Mock"
                        }
                      },
                      "id": 36794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26890,
                      "src": "9236:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 36800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9236:51:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36801,
                  "nodeType": "ExpressionStatement",
                  "src": "9236:51:48"
                },
                {
                  "assignments": [
                    36803
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36803,
                      "mutability": "mutable",
                      "name": "extraData",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9297:22:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36802,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "9297:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36805,
                  "initialValue": {
                    "hexValue": "736466647366",
                    "id": 36804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9322:8:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b0876586ac380dc3e684f13944e8e5ed07181c8454dbb3723cfe05797aea8202",
                      "typeString": "literal_string \"sdfdsf\""
                    },
                    "value": "sdfdsf"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9297:33:48"
                },
                {
                  "assignments": [
                    36807
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36807,
                      "mutability": "mutable",
                      "name": "action",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9340:19:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36806,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "9340:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36819,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 36810,
                            "name": "BridgeMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30301,
                            "src": "9392:13:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                              "typeString": "type(library BridgeMessage)"
                            }
                          },
                          "id": 36811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Types",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29620,
                          "src": "9392:19:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                            "typeString": "type(enum BridgeMessage.Types)"
                          }
                        },
                        "id": 36812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "TransferToHook",
                        "nodeType": "MemberAccess",
                        "src": "9392:34:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        }
                      },
                      {
                        "id": 36813,
                        "name": "hook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36767,
                        "src": "9440:4:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36814,
                        "name": "tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36776,
                        "src": "9458:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 36815,
                        "name": "tokenDetailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36780,
                        "src": "9483:16:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36816,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36784,
                        "src": "9513:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 36817,
                        "name": "extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36803,
                        "src": "9533:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Types_$29620",
                          "typeString": "enum BridgeMessage.Types"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36808,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "9362:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "9362:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9362:190:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9340:212:48"
                },
                {
                  "assignments": [
                    36821
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36821,
                      "mutability": "mutable",
                      "name": "origin",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9562:13:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36820,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9562:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36823,
                  "initialValue": {
                    "hexValue": "39",
                    "id": 36822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9578:1:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9_by_1",
                      "typeString": "int_const 9"
                    },
                    "value": "9"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9562:17:48"
                },
                {
                  "assignments": [
                    36825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36825,
                      "mutability": "mutable",
                      "name": "nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9589:12:48",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 36824,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9589:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36827,
                  "initialValue": {
                    "hexValue": "3130",
                    "id": 36826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9604:2:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10_by_1",
                      "typeString": "int_const 10"
                    },
                    "value": "10"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9589:17:48"
                },
                {
                  "assignments": [
                    36829
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36829,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 36857,
                      "src": "9616:20:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 36828,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "9616:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36840,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 36832,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42191,
                        "src": "9669:11:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 36835,
                                "name": "localToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42215,
                                "src": "9702:10:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                                  "typeString": "contract ERC20Mock"
                                }
                              ],
                              "id": 36834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9694:7:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 36833,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9694:7:48",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 36836,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9694:19:48",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 36837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46325,
                          "src": "9694:36:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$bound_to$_t_address_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 36838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9694:38:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 36830,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "9639:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 36831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "9639:16:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 36839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9639:103:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9616:126:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 36844,
                        "name": "origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36821,
                        "src": "9836:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36845,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36825,
                        "src": "9856:5:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 36846,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36829,
                        "src": "9875:7:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 36847,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36807,
                        "src": "9896:6:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 36841,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "9781:12:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 36843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_handleTransferToHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42032,
                      "src": "9781:41:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_uint32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes memory,bytes memory) external"
                      }
                    },
                    "id": 36848,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9781:131:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36849,
                  "nodeType": "ExpressionStatement",
                  "src": "9781:131:48"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 36851,
                            "name": "revertingToHook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 35887,
                            "src": "9931:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RevertingToHook_$42780",
                              "typeString": "contract RevertingToHook"
                            }
                          },
                          "id": 36852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "test",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 42739,
                          "src": "9931:20:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 36853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9931:22:48",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "313233",
                        "id": 36854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9955:3:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_123_by_1",
                          "typeString": "int_const 123"
                        },
                        "value": "123"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_123_by_1",
                          "typeString": "int_const 123"
                        }
                      ],
                      "id": 36850,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "9922:8:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 36855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9922:37:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 36856,
                  "nodeType": "ExpressionStatement",
                  "src": "9922:37:48"
                }
              ]
            },
            "functionSelector": "dd032940",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_handleHookTransferSucceeds",
            "parameters": {
              "id": 36764,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9010:2:48"
            },
            "returnParameters": {
              "id": 36765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9020:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 36900,
            "nodeType": "FunctionDefinition",
            "src": "9972:415:48",
            "body": {
              "id": 36899,
              "nodeType": "Block",
              "src": "10010:377:48",
              "statements": [
                {
                  "assignments": [
                    36864
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 36864,
                      "mutability": "mutable",
                      "name": "affected",
                      "nodeType": "VariableDeclaration",
                      "scope": 36899,
                      "src": "10020:35:48",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                        "typeString": "address payable[14]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 36861,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10020:15:48",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 36863,
                        "length": {
                          "hexValue": "3134",
                          "id": 36862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10036:2:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_14_by_1",
                            "typeString": "int_const 14"
                          },
                          "value": "14"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "10020:19:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_storage_ptr",
                          "typeString": "address payable[14]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 36868,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 36865,
                        "name": "mockAccountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42199,
                        "src": "10058:14:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockAccountant_$42565",
                          "typeString": "contract MockAccountant"
                        }
                      },
                      "id": 36866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "affectedAssets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42564,
                      "src": "10058:29:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$__$returns$_t_array$_t_address_payable_$14_memory_ptr_$",
                        "typeString": "function () pure external returns (address payable[14] memory)"
                      }
                    },
                    "id": 36867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10058:31:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                      "typeString": "address payable[14] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10020:69:48"
                },
                {
                  "body": {
                    "id": 36897,
                    "nodeType": "Block",
                    "src": "10145:236:48",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 36880,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1816,
                              "src": "10159:2:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vm_$6909",
                                "typeString": "contract Vm"
                              }
                            },
                            "id": 36882,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "expectRevert",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6489,
                            "src": "10159:15:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                              "typeString": "function () external"
                            }
                          },
                          "id": 36883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10159:17:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36884,
                        "nodeType": "ExpressionStatement",
                        "src": "10159:17:48"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 36888,
                                "name": "affected",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 36864,
                                "src": "10225:8:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                                  "typeString": "address payable[14] memory"
                                }
                              },
                              "id": 36890,
                              "indexExpression": {
                                "id": 36889,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 36870,
                                "src": "10234:1:48",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10225:11:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 36891,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10254:1:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            {
                              "id": 36892,
                              "name": "receiverDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35879,
                              "src": "10273:14:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 36893,
                              "name": "tokenReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35877,
                              "src": "10305:13:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 36894,
                              "name": "fastLiquidityEnabled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 35883,
                              "src": "10336:20:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "id": 36885,
                              "name": "bridgeRouter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42203,
                              "src": "10190:12:48",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                                "typeString": "contract EthereumBridgeRouterHarness"
                              }
                            },
                            "id": 36887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "send",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30550,
                            "src": "10190:17:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint32_$_t_bytes32_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,uint32,bytes32,bool) external"
                            }
                          },
                          "id": 36895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10190:180:48",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 36896,
                        "nodeType": "ExpressionStatement",
                        "src": "10190:180:48"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 36876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 36873,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 36870,
                      "src": "10119:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 36874,
                        "name": "affected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36864,
                        "src": "10123:8:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                          "typeString": "address payable[14] memory"
                        }
                      },
                      "id": 36875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10123:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10119:19:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 36898,
                  "initializationExpression": {
                    "assignments": [
                      36870
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 36870,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 36898,
                        "src": "10104:9:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 36869,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10104:7:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 36872,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 36871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10116:1:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10104:13:48"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 36878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10140:3:48",
                      "subExpression": {
                        "id": 36877,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 36870,
                        "src": "10140:1:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 36879,
                    "nodeType": "ExpressionStatement",
                    "src": "10140:3:48"
                  },
                  "nodeType": "ForStatement",
                  "src": "10099:282:48"
                }
              ]
            },
            "functionSelector": "d5677963",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_exitBridgeOnly",
            "parameters": {
              "id": 36859,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10000:2:48"
            },
            "returnParameters": {
              "id": 36860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10010:0:48"
            },
            "scope": 36901,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 35872,
              "name": "BridgeTest",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42467,
              "src": "427:10:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeTest_$42467",
                "typeString": "contract BridgeTest"
              }
            },
            "id": 35873,
            "nodeType": "InheritanceSpecifier",
            "src": "427:10:48"
          }
        ],
        "contractDependencies": [
          1786,
          2021,
          4902,
          42467,
          42780
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          36901,
          42467,
          4902,
          2021,
          1786
        ],
        "name": "BridgeRouterTest",
        "scope": 36902
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 48
}