{
  "_format": "hh-sol-artifact-1",
  "contractName": "ChainlinkSwapAssetInvestStrategy",
  "sourceName": "contracts/strategies/ChainlinkSwapAssetInvestStrategy.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "asset_",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Metadata",
          "name": "investAsset_",
          "type": "address"
        },
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "assetOracle_",
          "type": "address"
        },
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "investAssetOracle_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "priceTolerance_",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CanBeCalledOnlyThroughDelegateCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotDisconnectWithAssets",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAsset",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "chainlinkAnswer",
          "type": "int256"
        }
      ],
      "name": "InvalidPrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoExtraDataAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minUpdateAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "updatedAt",
          "type": "uint256"
        }
      ],
      "name": "PriceTooOld",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "oldConfig",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "newConfig",
          "type": "tuple"
        }
      ],
      "name": "SwapConfigChanged",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "assetOracle",
      "outputs": [
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "initData",
          "type": "bytes"
        }
      ],
      "name": "connect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        }
      ],
      "name": "disconnect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "method",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "forwardEntryPoint",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "getSwapConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "investAsset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "investAssetOracle",
      "outputs": [
        {
          "internalType": "contract AggregatorV3Interface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "investAssetPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "maxWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceTolerance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "storageSlot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contract_",
          "type": "address"
        }
      ],
      "name": "totalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x3060808181526040610180818152601e6101c0527f636f2e656e7375726f2e496e766573745374726174656779436c69656e7400006101e0526101a0939093526101608290526102009052902060a05234801561005a575f5ffd5b50604051611b3a380380611b3a833981016040819052610079916101f8565b84846012826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100dd919061025f565b60ff1611156100ff57604051636448d6e960e11b815260040160405180910390fd5b6012816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561013d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610161919061025f565b60ff16111561018357604051636448d6e960e11b815260040160405180910390fd5b806001600160a01b0316826001600160a01b0316036101b557604051636448d6e960e11b815260040160405180910390fd5b6001600160a01b0391821660c052811660e0529182166101205291166101005261014052506102869050565b6001600160a01b03811681146101f5575f5ffd5b50565b5f5f5f5f5f60a0868803121561020c575f5ffd5b8551610217816101e1565b6020870151909550610228816101e1565b6040870151909450610239816101e1565b606087015190935061024a816101e1565b80925050608086015190509295509295909350565b5f6020828403121561026f575f5ffd5b815160ff8116811461027f575f5ffd5b9392505050565b60805160a05160c05160e0516101005161012051610140516117d061036a5f395f81816101f201528181610c3a0152610c6b01525f81816101cb01526103a701525f818161014301526103d901525f81816102cb0152818161048e0152818161053601528181610662015281816108aa015281816109600152610f3f01525f818161025f0152818161055801528181610684015281816108890152610f1001525f818161022c015281816109f901528181610b880152610e3b01525f818161030c0152818161041101528181610725015281816107a1015261081e01526117d05ff3fe608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c80635a11745611610093578063b6b55f2511610063578063b6b55f2514610294578063ce96cb77146102a7578063de846ae4146102ba578063f3e0ffbf146102ed575f5ffd5b80635a117456146102145780635b9a4c35146102275780639c4667a21461024e5780639cd4712814610281575f5ffd5b8063402d267d116100ce578063402d267d1461019257806342b054f0146101a657806352ebfa29146101c657806359011cd1146101ed575f5ffd5b80630981b1c2146100ff5780631418983b146101285780631d4d3a5d1461013e5780632e1a7d4d1461017d575b5f5ffd5b61011261010d366004611145565b610300565b60405161011f91906111c0565b60405180910390f35b61013061039e565b60405190815260200161011f565b6101657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161011f565b61019061018b3660046111d2565b610407565b005b6101306101a03660046111e9565b505f1990565b6101b96101b43660046111e9565b6106f7565b60405161011f9190611269565b6101657f000000000000000000000000000000000000000000000000000000000000000081565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61019061022236600461127b565b61071b565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016561025c3660046111e9565b507f000000000000000000000000000000000000000000000000000000000000000090565b61019061028f36600461129a565b610797565b6101906102a23660046111d2565b610814565b6101306102b53660046111e9565b610935565b6101656102c83660046111e9565b507f000000000000000000000000000000000000000000000000000000000000000090565b6101306102fb3660046111e9565b61093b565b60606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361034b57604051632abf118b60e21b815260040160405180910390fd5b5f60ff8416801561035e5761035e61120f565b90505f8180156103705761037061120f565b036100fb57610387610381306109cf565b84610a91565b505060408051602081019091525f81525b92915050565b5f6104026103cb7f0000000000000000000000000000000000000000000000000000000000000000610bb1565b670de0b6b3a76400006103fd7f0000000000000000000000000000000000000000000000000000000000000000610bb1565b610d6e565b905090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361045057604051632abf118b60e21b815260040160405180910390fd5b80156106f4575f61045f610e1e565b90505f61046a610ef4565b6040516370a0823160e01b81523060048201529091506104fd906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f791906112cc565b30610f0a565b8310610631576040516370a0823160e01b815230600482015273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063775669159084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cb91906112cc565b866040518663ffffffff1660e01b81526004016105ec9594939291906112e3565b602060405180830381865af4158015610607573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b91906112cc565b506106f1565b60405163581e517d60e01b815273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063581e517d906106b09085907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090899088906004016112e3565b602060405180830381865af41580156106cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ef91906112cc565b505b50505b50565b60408051606080820183525f808352602083015291810191909152610398826109cf565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361076457604051632abf118b60e21b815260040160405180910390fd5b8015801561077957506107763061093b565b15155b156106f4576040516342a176d160e11b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107e057604051632abf118b60e21b815260040160405180910390fd5b60408051606081019091526106f490805f81526020015f815260200160405180602001604052805f81525081525082610a91565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361085d57604051632abf118b60e21b815260040160405180910390fd5b80156106f45761086b610e1e565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856108d261039e565b6040518663ffffffff1660e01b81526004016108f29594939291906112e3565b602060405180830381865af415801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093191906112cc565b5050565b5f610398825b6040516370a0823160e01b81526001600160a01b0382811660048301525f91610398917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156109a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906112cc565b83610f0a565b60408051606080820183525f8083526020830152918101919091526040516347e5753360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f906001600160a01b038416906347e57533906024015f60405180830381865afa158015610a4d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a74919081019061136f565b905080806020019051810190610a8a91906113a1565b9392505050565b5f81806020019051810190610aa691906113a1565b604051632cbf28cb60e21b815290915073__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063b2fca32c90610ae0908490600401611269565b5f6040518083038186803b158015610af6575f5ffd5b505af4158015610b08573d5f5f3e3d5ffd5b50505050815181604051602001610b1f9190611269565b6040516020818303038152906040525114610b4d576040516350701b6160e01b815260040160405180910390fd5b7fca7f7aa563866a1d31c74deba224724d1da9c35cbb6f783f2ccf0182f91e34f88382604051610b7e92919061142d565b60405180910390a17f00000000000000000000000000000000000000000000000000000000000000006106ef83826114dd565b5f6001600160a01b038216610bcf5750670de0b6b3a7640000919050565b5f5f836001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3191906115b6565b509350509250507f000000000000000000000000000000000000000000000000000000000000000042610c649190611618565b8111610c907f000000000000000000000000000000000000000000000000000000000000000042611618565b829091610cbe57604051633156ea9360e01b8152600481019290925260248201526044015b60405180910390fd5b50505f82138290610ce5576040516338ee04a760e01b8152600401610cb591815260200190565b50836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d46919061162b565b610d51906012611646565b610d5c90600a611742565b610d669083611750565b949350505050565b5f5f5f610d7b8686610fac565b91509150815f03610d9f57838181610d9557610d95611767565b0492505050610a8a565b818411610db657610db66003851502601118610fc8565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b60408051606080820183525f8083526020830152918101919091527f00000000000000000000000000000000000000000000000000000000000000008054610e659061145a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e919061145a565b8015610edc5780601f10610eb357610100808354040283529160200191610edc565b820191905f5260205f20905b815481529060010190602001808311610ebf57829003601f168201915b505050505080602001905181019061040291906113a1565b5f610402670de0b6b3a7640000806103fd61039e565b5f610f347f0000000000000000000000000000000000000000000000000000000000000000610fd9565b610fa2610f83610f637f0000000000000000000000000000000000000000000000000000000000000000610fd9565b610f6d9087611750565b610f7561039e565b670de0b6b3a7640000610d6e565b610f8c856109cf565b60200151610f7590670de0b6b3a7640000611618565b610a8a919061177b565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a919061162b565b611045906012611646565b61039890600a611742565b60ff811681146106f4575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156110955761109561105e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c461105e565b604052919050565b5f67ffffffffffffffff8211156110e5576110e561105e565b50601f01601f191660200190565b5f82601f830112611102575f5ffd5b8135611115611110826110cc565b61109b565b818152846020838601011115611129575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611156575f5ffd5b823561116181611050565b9150602083013567ffffffffffffffff81111561117c575f5ffd5b611188858286016110f3565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a8a6020830184611192565b5f602082840312156111e2575f5ffd5b5035919050565b5f602082840312156111f9575f5ffd5b81356001600160a01b0381168114610a8a575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f81516003811061124257634e487b7160e01b5f52602160045260245ffd5b8084525060208201516020840152604082015160606040850152610d666060850182611192565b602081525f610a8a6020830184611223565b5f6020828403121561128b575f5ffd5b81358015158114610a8a575f5ffd5b5f602082840312156112aa575f5ffd5b813567ffffffffffffffff8111156112c0575f5ffd5b610d66848285016110f3565b5f602082840312156112dc575f5ffd5b5051919050565b60a081525f6112f560a0830188611223565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b5f82601f830112611331575f5ffd5b815161133f611110826110cc565b818152846020838601011115611353575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561137f575f5ffd5b815167ffffffffffffffff811115611395575f5ffd5b610d6684828501611322565b5f602082840312156113b1575f5ffd5b815167ffffffffffffffff8111156113c7575f5ffd5b8201606081850312156113d8575f5ffd5b6113e0611072565b8151600381106113ee575f5ffd5b815260208281015190820152604082015167ffffffffffffffff811115611413575f5ffd5b61141f86828501611322565b604083015250949350505050565b604081525f61143f6040830185611223565b82810360208401526114518185611223565b95945050505050565b600181811c9082168061146e57607f821691505b60208210810361148c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106f157805f5260205f20601f840160051c810160208510156114b75750805b601f840160051c820191505b818110156114d6575f81556001016114c3565b5050505050565b815167ffffffffffffffff8111156114f7576114f761105e565b61150b81611505845461145a565b84611492565b6020601f82116001811461153d575f83156115265750848201515b5f19600385901b1c1916600184901b1784556114d6565b5f84815260208120601f198516915b8281101561156c578785015182556020948501946001909201910161154c565b508482101561158957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b805169ffffffffffffffffffff811681146115b1575f5ffd5b919050565b5f5f5f5f5f60a086880312156115ca575f5ffd5b6115d386611598565b602087015160408801516060890151929750909550935091506115f860808701611598565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561039857610398611604565b5f6020828403121561163b575f5ffd5b8151610a8a81611050565b60ff828116828216039081111561039857610398611604565b6001815b600184111561169a5780850481111561167e5761167e611604565b600184161561168c57908102905b60019390931c928002611663565b935093915050565b5f826116b057506001610398565b816116bc57505f610398565b81600181146116d257600281146116dc576116f8565b6001915050610398565b60ff8411156116ed576116ed611604565b50506001821b610398565b5060208310610133831016604e8410600b841016171561171b575081810a610398565b6117275f19848461165f565b805f190482111561173a5761173a611604565b029392505050565b5f610a8a60ff8416836116a2565b808202811582820484141761039857610398611604565b634e487b7160e01b5f52601260045260245ffd5b5f8261179557634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220fc08a7893d23afda4c3cb4a81930e87c3cc290d1b17c4f92b0c50fe828dfa09664736f6c634300081e0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100fb575f3560e01c80635a11745611610093578063b6b55f2511610063578063b6b55f2514610294578063ce96cb77146102a7578063de846ae4146102ba578063f3e0ffbf146102ed575f5ffd5b80635a117456146102145780635b9a4c35146102275780639c4667a21461024e5780639cd4712814610281575f5ffd5b8063402d267d116100ce578063402d267d1461019257806342b054f0146101a657806352ebfa29146101c657806359011cd1146101ed575f5ffd5b80630981b1c2146100ff5780631418983b146101285780631d4d3a5d1461013e5780632e1a7d4d1461017d575b5f5ffd5b61011261010d366004611145565b610300565b60405161011f91906111c0565b60405180910390f35b61013061039e565b60405190815260200161011f565b6101657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161011f565b61019061018b3660046111d2565b610407565b005b6101306101a03660046111e9565b505f1990565b6101b96101b43660046111e9565b6106f7565b60405161011f9190611269565b6101657f000000000000000000000000000000000000000000000000000000000000000081565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61019061022236600461127b565b61071b565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016561025c3660046111e9565b507f000000000000000000000000000000000000000000000000000000000000000090565b61019061028f36600461129a565b610797565b6101906102a23660046111d2565b610814565b6101306102b53660046111e9565b610935565b6101656102c83660046111e9565b507f000000000000000000000000000000000000000000000000000000000000000090565b6101306102fb3660046111e9565b61093b565b60606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361034b57604051632abf118b60e21b815260040160405180910390fd5b5f60ff8416801561035e5761035e61120f565b90505f8180156103705761037061120f565b036100fb57610387610381306109cf565b84610a91565b505060408051602081019091525f81525b92915050565b5f6104026103cb7f0000000000000000000000000000000000000000000000000000000000000000610bb1565b670de0b6b3a76400006103fd7f0000000000000000000000000000000000000000000000000000000000000000610bb1565b610d6e565b905090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361045057604051632abf118b60e21b815260040160405180910390fd5b80156106f4575f61045f610e1e565b90505f61046a610ef4565b6040516370a0823160e01b81523060048201529091506104fd906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f791906112cc565b30610f0a565b8310610631576040516370a0823160e01b815230600482015273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063775669159084907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cb91906112cc565b866040518663ffffffff1660e01b81526004016105ec9594939291906112e3565b602060405180830381865af4158015610607573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b91906112cc565b506106f1565b60405163581e517d60e01b815273__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063581e517d906106b09085907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090899088906004016112e3565b602060405180830381865af41580156106cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ef91906112cc565b505b50505b50565b60408051606080820183525f808352602083015291810191909152610398826109cf565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361076457604051632abf118b60e21b815260040160405180910390fd5b8015801561077957506107763061093b565b15155b156106f4576040516342a176d160e11b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107e057604051632abf118b60e21b815260040160405180910390fd5b60408051606081019091526106f490805f81526020015f815260200160405180602001604052805f81525081525082610a91565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361085d57604051632abf118b60e21b815260040160405180910390fd5b80156106f45761086b610e1e565b73__$acbb9ece542dcf2065f41aa3c8cca5827e$__637756691590917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856108d261039e565b6040518663ffffffff1660e01b81526004016108f29594939291906112e3565b602060405180830381865af415801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093191906112cc565b5050565b5f610398825b6040516370a0823160e01b81526001600160a01b0382811660048301525f91610398917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156109a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906112cc565b83610f0a565b60408051606080820183525f8083526020830152918101919091526040516347e5753360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f906001600160a01b038416906347e57533906024015f60405180830381865afa158015610a4d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a74919081019061136f565b905080806020019051810190610a8a91906113a1565b9392505050565b5f81806020019051810190610aa691906113a1565b604051632cbf28cb60e21b815290915073__$acbb9ece542dcf2065f41aa3c8cca5827e$__9063b2fca32c90610ae0908490600401611269565b5f6040518083038186803b158015610af6575f5ffd5b505af4158015610b08573d5f5f3e3d5ffd5b50505050815181604051602001610b1f9190611269565b6040516020818303038152906040525114610b4d576040516350701b6160e01b815260040160405180910390fd5b7fca7f7aa563866a1d31c74deba224724d1da9c35cbb6f783f2ccf0182f91e34f88382604051610b7e92919061142d565b60405180910390a17f00000000000000000000000000000000000000000000000000000000000000006106ef83826114dd565b5f6001600160a01b038216610bcf5750670de0b6b3a7640000919050565b5f5f836001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3191906115b6565b509350509250507f000000000000000000000000000000000000000000000000000000000000000042610c649190611618565b8111610c907f000000000000000000000000000000000000000000000000000000000000000042611618565b829091610cbe57604051633156ea9360e01b8152600481019290925260248201526044015b60405180910390fd5b50505f82138290610ce5576040516338ee04a760e01b8152600401610cb591815260200190565b50836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d46919061162b565b610d51906012611646565b610d5c90600a611742565b610d669083611750565b949350505050565b5f5f5f610d7b8686610fac565b91509150815f03610d9f57838181610d9557610d95611767565b0492505050610a8a565b818411610db657610db66003851502601118610fc8565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b60408051606080820183525f8083526020830152918101919091527f00000000000000000000000000000000000000000000000000000000000000008054610e659061145a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e919061145a565b8015610edc5780601f10610eb357610100808354040283529160200191610edc565b820191905f5260205f20905b815481529060010190602001808311610ebf57829003601f168201915b505050505080602001905181019061040291906113a1565b5f610402670de0b6b3a7640000806103fd61039e565b5f610f347f0000000000000000000000000000000000000000000000000000000000000000610fd9565b610fa2610f83610f637f0000000000000000000000000000000000000000000000000000000000000000610fd9565b610f6d9087611750565b610f7561039e565b670de0b6b3a7640000610d6e565b610f8c856109cf565b60200151610f7590670de0b6b3a7640000611618565b610a8a919061177b565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103a919061162b565b611045906012611646565b61039890600a611742565b60ff811681146106f4575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156110955761109561105e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c461105e565b604052919050565b5f67ffffffffffffffff8211156110e5576110e561105e565b50601f01601f191660200190565b5f82601f830112611102575f5ffd5b8135611115611110826110cc565b61109b565b818152846020838601011115611129575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215611156575f5ffd5b823561116181611050565b9150602083013567ffffffffffffffff81111561117c575f5ffd5b611188858286016110f3565b9150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a8a6020830184611192565b5f602082840312156111e2575f5ffd5b5035919050565b5f602082840312156111f9575f5ffd5b81356001600160a01b0381168114610a8a575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f81516003811061124257634e487b7160e01b5f52602160045260245ffd5b8084525060208201516020840152604082015160606040850152610d666060850182611192565b602081525f610a8a6020830184611223565b5f6020828403121561128b575f5ffd5b81358015158114610a8a575f5ffd5b5f602082840312156112aa575f5ffd5b813567ffffffffffffffff8111156112c0575f5ffd5b610d66848285016110f3565b5f602082840312156112dc575f5ffd5b5051919050565b60a081525f6112f560a0830188611223565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b5f82601f830112611331575f5ffd5b815161133f611110826110cc565b818152846020838601011115611353575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561137f575f5ffd5b815167ffffffffffffffff811115611395575f5ffd5b610d6684828501611322565b5f602082840312156113b1575f5ffd5b815167ffffffffffffffff8111156113c7575f5ffd5b8201606081850312156113d8575f5ffd5b6113e0611072565b8151600381106113ee575f5ffd5b815260208281015190820152604082015167ffffffffffffffff811115611413575f5ffd5b61141f86828501611322565b604083015250949350505050565b604081525f61143f6040830185611223565b82810360208401526114518185611223565b95945050505050565b600181811c9082168061146e57607f821691505b60208210810361148c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156106f157805f5260205f20601f840160051c810160208510156114b75750805b601f840160051c820191505b818110156114d6575f81556001016114c3565b5050505050565b815167ffffffffffffffff8111156114f7576114f761105e565b61150b81611505845461145a565b84611492565b6020601f82116001811461153d575f83156115265750848201515b5f19600385901b1c1916600184901b1784556114d6565b5f84815260208120601f198516915b8281101561156c578785015182556020948501946001909201910161154c565b508482101561158957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b805169ffffffffffffffffffff811681146115b1575f5ffd5b919050565b5f5f5f5f5f60a086880312156115ca575f5ffd5b6115d386611598565b602087015160408801516060890151929750909550935091506115f860808701611598565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561039857610398611604565b5f6020828403121561163b575f5ffd5b8151610a8a81611050565b60ff828116828216039081111561039857610398611604565b6001815b600184111561169a5780850481111561167e5761167e611604565b600184161561168c57908102905b60019390931c928002611663565b935093915050565b5f826116b057506001610398565b816116bc57505f610398565b81600181146116d257600281146116dc576116f8565b6001915050610398565b60ff8411156116ed576116ed611604565b50506001821b610398565b5060208310610133831016604e8410600b841016171561171b575081810a610398565b6117275f19848461165f565b805f190482111561173a5761173a611604565b029392505050565b5f610a8a60ff8416836116a2565b808202811582820484141761039857610398611604565b634e487b7160e01b5f52601260045260245ffd5b5f8261179557634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220fc08a7893d23afda4c3cb4a81930e87c3cc290d1b17c4f92b0c50fe828dfa09664736f6c634300081e0033",
  "linkReferences": {
    "@ensuro/swaplibrary/contracts/SwapLibrary.sol": {
      "SwapLibrary": [
        {
          "length": 20,
          "start": 2178
        },
        {
          "length": 20,
          "start": 2474
        },
        {
          "length": 20,
          "start": 3031
        },
        {
          "length": 20,
          "start": 3618
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "@ensuro/swaplibrary/contracts/SwapLibrary.sol": {
      "SwapLibrary": [
        {
          "length": 20,
          "start": 1304
        },
        {
          "length": 20,
          "start": 1600
        },
        {
          "length": 20,
          "start": 2157
        },
        {
          "length": 20,
          "start": 2744
        }
      ]
    }
  }
}
