{
  "_format": "hh-sol-artifact-1",
  "contractName": "OptimismDVNAdapterL2",
  "sourceName": "contracts/uln/dvn/adapters/optimism/OptimismDVNAdapterL2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_admins",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "_l2Messenger",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requested",
          "type": "uint256"
        }
      ],
      "name": "DVNAdapter_InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DVNAdapter_InvalidMessageSize",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sendLib",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "DVNAdapter_MissingRecieveLib",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DVNAdapter_NotImplemented",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer_NativeFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Transfer_ToAddressIsZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "peer",
          "type": "address"
        }
      ],
      "name": "UntrustedPeer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_NotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_OnlyMessageLib",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Worker_RoleRenouncingDisabled",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "peer",
          "type": "address"
        }
      ],
      "name": "PeerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sendLib",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "receiveLib",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct ReceiveLibParam[]",
          "name": "params",
          "type": "tuple[]"
        }
      ],
      "name": "ReceiveLibsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "SetDefaultMultiplierBps",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "priceFeed",
          "type": "address"
        }
      ],
      "name": "SetPriceFeed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8[]",
          "name": "optionTypes",
          "type": "uint8[]"
        }
      ],
      "name": "SetSupportedOptionTypes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "workerLib",
          "type": "address"
        }
      ],
      "name": "SetWorkerLib",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "lib",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allowlistSize",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes",
              "name": "packetHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "payloadHash",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "confirmations",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "internalType": "struct ILayerZeroDVN.AssignJobParam",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "assignJob",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMultiplierBps",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        }
      ],
      "name": "getSupportedOptionTypes",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "hasAcl",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2Messenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "peer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceFeed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sendLib",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "receiveLibs",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "receiveLib",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "setDefaultMultiplierBps",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "setPaused",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_peer",
          "type": "address"
        }
      ],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_priceFeed",
          "type": "address"
        }
      ],
      "name": "setPriceFeed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sendLib",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "receiveLib",
              "type": "bytes32"
            }
          ],
          "internalType": "struct ReceiveLibParam[]",
          "name": "_params",
          "type": "tuple[]"
        }
      ],
      "name": "setReceiveLibs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint8[]",
          "name": "_optionTypes",
          "type": "uint8[]"
        }
      ],
      "name": "setSupportedOptionTypes",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_workerFeeLib",
          "type": "address"
        }
      ],
      "name": "setWorkerFeeLib",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_lib",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "workerFeeLib",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002e0838038062002e088339810160408190526200003491620002e0565b604080516000808252602082019092526001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b031916905533918491612ee09182858581156200008b576200008b6000836200015f565b60005b8551811015620000ef57620000e67f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d257620000d2620003c6565b60200260200101516200015f60201b60201c565b6001016200008e565b5060005b81518110156200014057620001377fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d257620000d2620003c6565b600101620000f3565b5050506001600160a01b03909616608052506200041995505050505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015620001b057506000828152602081815260408083206001600160a01b038516845290915290205460ff16155b15620001fd5760018054601590620001d890600160a81b90046001600160401b0316620003dc565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200020982826200020d565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000209576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002693390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620002db57600080fd5b919050565b60008060408385031215620002f457600080fd5b82516001600160401b03808211156200030c57600080fd5b818501915085601f8301126200032157600080fd5b8151602082821115620003385762000338620002ad565b8160051b604051601f19603f83011681018181108682111715620003605762000360620002ad565b6040529283528183019350848101820192898411156200037f57600080fd5b948201945b83861015620003a8576200039886620002c3565b8552948201949382019362000384565b9650620003b99050878201620002c3565b9450505050509250929050565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200040f57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6080516129c5620004436000396000818161067c01528181610d700152610dcb01526129c56000f3fe6080604052600436106101c55760003560e01c80635c975abb116100f7578063a217fddf11610095578063cd88b90311610064578063cd88b903146105d7578063d2ae2104146105f7578063d547741f1461064a578063f5730a721461066a57600080fd5b8063a217fddf14610550578063c358de0a14610565578063c416aa5114610585578063c7b2370b146105b757600080fd5b8063741bef1a116100d1578063741bef1a146104a45780638e760afe146104d157806391d14854146104f157806395d376d71461054257600080fd5b80635c975abb1461044c57806369b90d6814610464578063724e78da1461048457600080fd5b806326e67a371161016457806330bb3aac1161013e57806330bb3aac146103b457806336568abe146103d45780634cfa6d2c146103f457806351b6a0fd1461042c57600080fd5b806326e67a37146103475780632de11376146103745780632f2ff15d1461039457600080fd5b80631095b6d7116101a05780631095b6d71461027757806311cda4151461029757806316c38b3c146102e9578063248a9ca31461030957600080fd5b8062bf2e80146101d157806301e336671461022557806301ffc9a71461024757600080fd5b366101cc57005b600080fd5b3480156101dd57600080fd5b5060015461020d907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023157600080fd5b506102456102403660046120db565b61069e565b005b34801561025357600080fd5b5061026761026236600461211c565b6106d9565b604051901515815260200161021c565b34801561028357600080fd5b506102456102923660046120db565b610772565b3480156102a357600080fd5b506005546102c49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021c565b3480156102f557600080fd5b5061024561030436600461216c565b610901565b34801561031557600080fd5b50610339610324366004612189565b60009081526020819052604090206001015490565b60405190815260200161021c565b34801561035357600080fd5b506103676103623660046121b6565b610926565b60405161021c91906121d1565b34801561038057600080fd5b5061026761038f366004612218565b6109ad565b3480156103a057600080fd5b506102456103af366004612235565b610a92565b3480156103c057600080fd5b506103396103cf3660046122ae565b610abc565b3480156103e057600080fd5b506102456103ef366004612235565b610af0565b34801561040057600080fd5b5061033961040f366004612333565b600460209081526000928352604080842090915290825290205481565b34801561043857600080fd5b50610245610447366004612368565b610b22565b34801561045857600080fd5b5060015460ff16610267565b34801561047057600080fd5b5061024561047f366004612218565b610c19565b34801561049057600080fd5b5061024561049f366004612218565b610cb3565b3480156104b057600080fd5b506002546102c49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104dd57600080fd5b506102456104ec3660046123dd565b610d58565b3480156104fd57600080fd5b5061026761050c366004612235565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103396103cf36600461241f565b34801561055c57600080fd5b50610339600081565b34801561057157600080fd5b50610245610580366004612490565b610ed8565b34801561059157600080fd5b506001546102c490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105c357600080fd5b506102456105d2366004612218565b610f86565b3480156105e357600080fd5b506102456105f23660046124b4565b61102a565b34801561060357600080fd5b50600154610631907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161021c565b34801561065657600080fd5b50610245610665366004612235565b61107b565b34801561067657600080fd5b506102c47f000000000000000000000000000000000000000000000000000000000000000081565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106c8816110a0565b6106d38484846110ad565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061076c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561079c816110a0565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff1661081a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088a57600080fd5b505af115801561089e573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061090c816110a0565b811561091e5761091a6110dd565b5050565b61091a61115c565b63ffffffff81166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156109a157602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109725790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a0257506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610a78575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610a8557506001919050565b506000919050565b919050565b600082815260208190526040902060010154610aad816110a0565b610ab783836111b3565b505050565b60006040517f9c5846fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b2d816110a0565b60005b82811015610bda5736848483818110610b4b57610b4b61253a565b60600291909101915050604081013560046000610b6b6020850185612218565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610bba91906121b6565b63ffffffff16815260208101919091526040016000205550600101610b30565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610c0c929190612569565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c43816110a0565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f25fecc89eba6e3655a12d5db63dceb5f0711081bd42663652110b98d9a1ec77390600090a25050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610cdd816110a0565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610dc7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5891906125e6565b60055490915073ffffffffffffffffffffffffffffffffffffffff808316911614610ecc576040517f624ac80300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b610ab760008484611279565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f02816110a0565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d4c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610fb0816110a0565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d4c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611054816110a0565b63ffffffff84166000908152600360205260409020611074908484611ffb565b5050505050565b600082815260208190526040902060010154611096816110a0565b610ab78383611398565b6110aa813361145d565b50565b73ffffffffffffffffffffffffffffffffffffffff83166110d257610ab78282611515565b610ab783838361161b565b6110e5611689565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6111646116f8565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611132565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611210575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b1561126f5760018054601590611248907501000000000000000000000000000000000000000000900467ffffffffffffffff16612632565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61091a8282611764565b8263ffffffff1661753061128d8484611854565b6112979190612659565b63ffffffff1614611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f44564e41646170746572426173653a20696e76616c69642073726345696400006044820152606401610ec3565b60008060006113138585611885565b9250925092508273ffffffffffffffffffffffffffffffffffffffff16630223536e838367ffffffffffffffff6040518463ffffffff1660e01b815260040161135e93929190612711565b600060405180830381600087803b15801561137857600080fd5b505af115801561138c573d6000803e3d6000fd5b50505050505050505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156113f4575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b15611453576001805460159061142c907501000000000000000000000000000000000000000000900467ffffffffffffffff16612744565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61091a8282611954565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091a5761149b81611a0b565b6114a6836020611a2a565b6040516020016114b7929190612786565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610ec391600401612807565b73ffffffffffffffffffffffffffffffffffffffff8216611562576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b5050905080610ab7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ec3565b73ffffffffffffffffffffffffffffffffffffffff8216611668576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab773ffffffffffffffffffffffffffffffffffffffff84168383611c74565b60015460ff16156116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610ec3565b565b60015460ff166116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610ec3565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091a5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556117f63390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008260498361186582600461281a565b926118729392919061282d565b61187b91612857565b60e01c9392505050565b60006060816118966051604061281a565b84146118ce576040517ff1d10e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118eb6118df60206000878961282d565b6118e89161289f565b90565b92506118fb60406020868861282d565b6119049161289f565b9050611913846040818861282d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509598929750929550909350505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561091a5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606061076c73ffffffffffffffffffffffffffffffffffffffff831660145b60606000611a398360026128db565b611a4490600261281a565b67ffffffffffffffff811115611a5c57611a5c6128f2565b6040519080825280601f01601f191660200182016040528015611a86576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611abd57611abd61253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b2057611b2061253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611b5c8460026128db565b611b6790600161281a565b90505b6001811115611c04577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611ba857611ba861253a565b1a60f81b828281518110611bbe57611bbe61253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611bfd81612921565b9050611b6a565b508315611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ec3565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610ab792869291600091611d3f918516908490611dec565b9050805160001480611d60575080806020019051810190611d609190612956565b610ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ec3565b6060611dfb8484600085611e03565b949350505050565b606082471015611e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ec3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611ebe9190612973565b60006040518083038185875af1925050503d8060008114611efb576040519150601f19603f3d011682016040523d82523d6000602084013e611f00565b606091505b5091509150611f1187838387611f1c565b979650505050505050565b60608315611fb2578251600003611fab5773ffffffffffffffffffffffffffffffffffffffff85163b611fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec3565b5081611dfb565b611dfb8383815115611fc75781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec39190612807565b82805482825590600052602060002090601f016020900481019282156120945791602002820160005b8382111561206557833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612024565b80156120925782816101000a81549060ff0219169055600101602081600001049283019260010302612065565b505b506120a09291506120a4565b5090565b5b808211156120a057600081556001016120a5565b73ffffffffffffffffffffffffffffffffffffffff811681146110aa57600080fd5b6000806000606084860312156120f057600080fd5b83356120fb816120b9565b9250602084013561210b816120b9565b929592945050506040919091013590565b60006020828403121561212e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611c6d57600080fd5b80151581146110aa57600080fd5b60006020828403121561217e57600080fd5b8135611c6d8161215e565b60006020828403121561219b57600080fd5b5035919050565b803563ffffffff81168114610a8d57600080fd5b6000602082840312156121c857600080fd5b611c6d826121a2565b6020808252825182820181905260009190848201906040850190845b8181101561220c57835160ff16835292840192918401916001016121ed565b50909695505050505050565b60006020828403121561222a57600080fd5b8135611c6d816120b9565b6000806040838503121561224857600080fd5b82359150602083013561225a816120b9565b809150509250929050565b60008083601f84011261227757600080fd5b50813567ffffffffffffffff81111561228f57600080fd5b6020830191508360208285010111156122a757600080fd5b9250929050565b6000806000806000608086880312156122c657600080fd5b6122cf866121a2565b9450602086013567ffffffffffffffff80821682146122ed57600080fd5b9094506040870135906122ff826120b9565b9093506060870135908082111561231557600080fd5b5061232288828901612265565b969995985093965092949392505050565b6000806040838503121561234657600080fd5b8235612351816120b9565b915061235f602084016121a2565b90509250929050565b6000806020838503121561237b57600080fd5b823567ffffffffffffffff8082111561239357600080fd5b818501915085601f8301126123a757600080fd5b8135818111156123b657600080fd5b8660206060830285010111156123cb57600080fd5b60209290920196919550909350505050565b600080602083850312156123f057600080fd5b823567ffffffffffffffff81111561240757600080fd5b61241385828601612265565b90969095509350505050565b60008060006040848603121561243457600080fd5b833567ffffffffffffffff8082111561244c57600080fd5b9085019060a0828803121561246057600080fd5b9093506020850135908082111561247657600080fd5b5061248386828701612265565b9497909650939450505050565b6000602082840312156124a257600080fd5b813561ffff81168114611c6d57600080fd5b6000806000604084860312156124c957600080fd5b6124d2846121a2565b9250602084013567ffffffffffffffff808211156124ef57600080fd5b818601915086601f83011261250357600080fd5b81358181111561251257600080fd5b8760208260051b850101111561252757600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156125d9578135612592816120b9565b73ffffffffffffffffffffffffffffffffffffffff16835263ffffffff6125ba8387016121a2565b168386015281840135848401526060928301929091019060010161257f565b5090979650505050505050565b6000602082840312156125f857600080fd5b8151611c6d816120b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361264f5761264f612603565b6001019392505050565b600063ffffffff80841680612697577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60005b838110156126be5781810151838201526020016126a6565b50506000910152565b600081518084526126df8160208601602086016126a3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600061272460608301866126c7565b905083602083015267ffffffffffffffff83166040830152949350505050565b600067ffffffffffffffff82168061275e5761275e612603565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516127be8160178501602088016126a3565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516127fb8160288401602088016126a3565b01602801949350505050565b602081526000611c6d60208301846126c7565b8082018082111561076c5761076c612603565b6000808585111561283d57600080fd5b8386111561284a57600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156128975780818660040360031b1b83161692505b505092915050565b8035602083101561076c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761076c5761076c612603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008161293057612930612603565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561296857600080fd5b8151611c6d8161215e565b600082516129858184602087016126a3565b919091019291505056fea2646970667358221220882fa86b9a6ef45c69c75f5f21e8f130ef420e9452af697fd024a55a38ef108464736f6c63430008160033",
  "deployedBytecode": "0x6080604052600436106101c55760003560e01c80635c975abb116100f7578063a217fddf11610095578063cd88b90311610064578063cd88b903146105d7578063d2ae2104146105f7578063d547741f1461064a578063f5730a721461066a57600080fd5b8063a217fddf14610550578063c358de0a14610565578063c416aa5114610585578063c7b2370b146105b757600080fd5b8063741bef1a116100d1578063741bef1a146104a45780638e760afe146104d157806391d14854146104f157806395d376d71461054257600080fd5b80635c975abb1461044c57806369b90d6814610464578063724e78da1461048457600080fd5b806326e67a371161016457806330bb3aac1161013e57806330bb3aac146103b457806336568abe146103d45780634cfa6d2c146103f457806351b6a0fd1461042c57600080fd5b806326e67a37146103475780632de11376146103745780632f2ff15d1461039457600080fd5b80631095b6d7116101a05780631095b6d71461027757806311cda4151461029757806316c38b3c146102e9578063248a9ca31461030957600080fd5b8062bf2e80146101d157806301e336671461022557806301ffc9a71461024757600080fd5b366101cc57005b600080fd5b3480156101dd57600080fd5b5060015461020d907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561023157600080fd5b506102456102403660046120db565b61069e565b005b34801561025357600080fd5b5061026761026236600461211c565b6106d9565b604051901515815260200161021c565b34801561028357600080fd5b506102456102923660046120db565b610772565b3480156102a357600080fd5b506005546102c49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021c565b3480156102f557600080fd5b5061024561030436600461216c565b610901565b34801561031557600080fd5b50610339610324366004612189565b60009081526020819052604090206001015490565b60405190815260200161021c565b34801561035357600080fd5b506103676103623660046121b6565b610926565b60405161021c91906121d1565b34801561038057600080fd5b5061026761038f366004612218565b6109ad565b3480156103a057600080fd5b506102456103af366004612235565b610a92565b3480156103c057600080fd5b506103396103cf3660046122ae565b610abc565b3480156103e057600080fd5b506102456103ef366004612235565b610af0565b34801561040057600080fd5b5061033961040f366004612333565b600460209081526000928352604080842090915290825290205481565b34801561043857600080fd5b50610245610447366004612368565b610b22565b34801561045857600080fd5b5060015460ff16610267565b34801561047057600080fd5b5061024561047f366004612218565b610c19565b34801561049057600080fd5b5061024561049f366004612218565b610cb3565b3480156104b057600080fd5b506002546102c49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104dd57600080fd5b506102456104ec3660046123dd565b610d58565b3480156104fd57600080fd5b5061026761050c366004612235565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103396103cf36600461241f565b34801561055c57600080fd5b50610339600081565b34801561057157600080fd5b50610245610580366004612490565b610ed8565b34801561059157600080fd5b506001546102c490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105c357600080fd5b506102456105d2366004612218565b610f86565b3480156105e357600080fd5b506102456105f23660046124b4565b61102a565b34801561060357600080fd5b50600154610631907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161021c565b34801561065657600080fd5b50610245610665366004612235565b61107b565b34801561067657600080fd5b506102c47f000000000000000000000000000000000000000000000000000000000000000081565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756106c8816110a0565b6106d38484846110ad565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061076c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561079c816110a0565b73ffffffffffffffffffffffffffffffffffffffff841660009081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff1661081a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088a57600080fd5b505af115801561089e573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b600061090c816110a0565b811561091e5761091a6110dd565b5050565b61091a61115c565b63ffffffff81166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156109a157602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109725790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610a0257506000919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610a78575073ffffffffffffffffffffffffffffffffffffffff821660009081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610a8557506001919050565b506000919050565b919050565b600082815260208190526040902060010154610aad816110a0565b610ab783836111b3565b505050565b60006040517f9c5846fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b2d816110a0565b60005b82811015610bda5736848483818110610b4b57610b4b61253a565b60600291909101915050604081013560046000610b6b6020850185612218565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836020016020810190610bba91906121b6565b63ffffffff16815260208101919091526040016000205550600101610b30565b507f360a0efdea8fcc9a11ee20a2099e314ddcf49a941d66790cd4e5adea30faa0748383604051610c0c929190612569565b60405180910390a1505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c43816110a0565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f25fecc89eba6e3655a12d5db63dceb5f0711081bd42663652110b98d9a1ec77390600090a25050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610cdd816110a0565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610dc7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5891906125e6565b60055490915073ffffffffffffffffffffffffffffffffffffffff808316911614610ecc576040517f624ac80300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b610ab760008484611279565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f02816110a0565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d4c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610fb0816110a0565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d4c565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611054816110a0565b63ffffffff84166000908152600360205260409020611074908484611ffb565b5050505050565b600082815260208190526040902060010154611096816110a0565b610ab78383611398565b6110aa813361145d565b50565b73ffffffffffffffffffffffffffffffffffffffff83166110d257610ab78282611515565b610ab783838361161b565b6110e5611689565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6111646116f8565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611132565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca82148015611210575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b1561126f5760018054601590611248907501000000000000000000000000000000000000000000900467ffffffffffffffff16612632565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61091a8282611764565b8263ffffffff1661753061128d8484611854565b6112979190612659565b63ffffffff1614611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f44564e41646170746572426173653a20696e76616c69642073726345696400006044820152606401610ec3565b60008060006113138585611885565b9250925092508273ffffffffffffffffffffffffffffffffffffffff16630223536e838367ffffffffffffffff6040518463ffffffff1660e01b815260040161135e93929190612711565b600060405180830381600087803b15801561137857600080fd5b505af115801561138c573d6000803e3d6000fd5b50505050505050505050565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156113f4575060008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b15611453576001805460159061142c907501000000000000000000000000000000000000000000900467ffffffffffffffff16612744565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61091a8282611954565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091a5761149b81611a0b565b6114a6836020611a2a565b6040516020016114b7929190612786565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610ec391600401612807565b73ffffffffffffffffffffffffffffffffffffffff8216611562576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b5050905080610ab7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ec3565b73ffffffffffffffffffffffffffffffffffffffff8216611668576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab773ffffffffffffffffffffffffffffffffffffffff84168383611c74565b60015460ff16156116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610ec3565b565b60015460ff166116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610ec3565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091a5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556117f63390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008260498361186582600461281a565b926118729392919061282d565b61187b91612857565b60e01c9392505050565b60006060816118966051604061281a565b84146118ce576040517ff1d10e0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118eb6118df60206000878961282d565b6118e89161289f565b90565b92506118fb60406020868861282d565b6119049161289f565b9050611913846040818861282d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509598929750929550909350505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561091a5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606061076c73ffffffffffffffffffffffffffffffffffffffff831660145b60606000611a398360026128db565b611a4490600261281a565b67ffffffffffffffff811115611a5c57611a5c6128f2565b6040519080825280601f01601f191660200182016040528015611a86576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611abd57611abd61253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b2057611b2061253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611b5c8460026128db565b611b6790600161281a565b90505b6001811115611c04577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611ba857611ba861253a565b1a60f81b828281518110611bbe57611bbe61253a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611bfd81612921565b9050611b6a565b508315611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ec3565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610ab792869291600091611d3f918516908490611dec565b9050805160001480611d60575080806020019051810190611d609190612956565b610ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ec3565b6060611dfb8484600085611e03565b949350505050565b606082471015611e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ec3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611ebe9190612973565b60006040518083038185875af1925050503d8060008114611efb576040519150601f19603f3d011682016040523d82523d6000602084013e611f00565b606091505b5091509150611f1187838387611f1c565b979650505050505050565b60608315611fb2578251600003611fab5773ffffffffffffffffffffffffffffffffffffffff85163b611fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec3565b5081611dfb565b611dfb8383815115611fc75781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec39190612807565b82805482825590600052602060002090601f016020900481019282156120945791602002820160005b8382111561206557833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612024565b80156120925782816101000a81549060ff0219169055600101602081600001049283019260010302612065565b505b506120a09291506120a4565b5090565b5b808211156120a057600081556001016120a5565b73ffffffffffffffffffffffffffffffffffffffff811681146110aa57600080fd5b6000806000606084860312156120f057600080fd5b83356120fb816120b9565b9250602084013561210b816120b9565b929592945050506040919091013590565b60006020828403121561212e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611c6d57600080fd5b80151581146110aa57600080fd5b60006020828403121561217e57600080fd5b8135611c6d8161215e565b60006020828403121561219b57600080fd5b5035919050565b803563ffffffff81168114610a8d57600080fd5b6000602082840312156121c857600080fd5b611c6d826121a2565b6020808252825182820181905260009190848201906040850190845b8181101561220c57835160ff16835292840192918401916001016121ed565b50909695505050505050565b60006020828403121561222a57600080fd5b8135611c6d816120b9565b6000806040838503121561224857600080fd5b82359150602083013561225a816120b9565b809150509250929050565b60008083601f84011261227757600080fd5b50813567ffffffffffffffff81111561228f57600080fd5b6020830191508360208285010111156122a757600080fd5b9250929050565b6000806000806000608086880312156122c657600080fd5b6122cf866121a2565b9450602086013567ffffffffffffffff80821682146122ed57600080fd5b9094506040870135906122ff826120b9565b9093506060870135908082111561231557600080fd5b5061232288828901612265565b969995985093965092949392505050565b6000806040838503121561234657600080fd5b8235612351816120b9565b915061235f602084016121a2565b90509250929050565b6000806020838503121561237b57600080fd5b823567ffffffffffffffff8082111561239357600080fd5b818501915085601f8301126123a757600080fd5b8135818111156123b657600080fd5b8660206060830285010111156123cb57600080fd5b60209290920196919550909350505050565b600080602083850312156123f057600080fd5b823567ffffffffffffffff81111561240757600080fd5b61241385828601612265565b90969095509350505050565b60008060006040848603121561243457600080fd5b833567ffffffffffffffff8082111561244c57600080fd5b9085019060a0828803121561246057600080fd5b9093506020850135908082111561247657600080fd5b5061248386828701612265565b9497909650939450505050565b6000602082840312156124a257600080fd5b813561ffff81168114611c6d57600080fd5b6000806000604084860312156124c957600080fd5b6124d2846121a2565b9250602084013567ffffffffffffffff808211156124ef57600080fd5b818601915086601f83011261250357600080fd5b81358181111561251257600080fd5b8760208260051b850101111561252757600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252818101839052600090604080840186845b878110156125d9578135612592816120b9565b73ffffffffffffffffffffffffffffffffffffffff16835263ffffffff6125ba8387016121a2565b168386015281840135848401526060928301929091019060010161257f565b5090979650505050505050565b6000602082840312156125f857600080fd5b8151611c6d816120b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361264f5761264f612603565b6001019392505050565b600063ffffffff80841680612697577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60005b838110156126be5781810151838201526020016126a6565b50506000910152565b600081518084526126df8160208601602086016126a3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600061272460608301866126c7565b905083602083015267ffffffffffffffff83166040830152949350505050565b600067ffffffffffffffff82168061275e5761275e612603565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516127be8160178501602088016126a3565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516127fb8160288401602088016126a3565b01602801949350505050565b602081526000611c6d60208301846126c7565b8082018082111561076c5761076c612603565b6000808585111561283d57600080fd5b8386111561284a57600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156128975780818660040360031b1b83161692505b505092915050565b8035602083101561076c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761076c5761076c612603565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008161293057612930612603565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006020828403121561296857600080fd5b8151611c6d8161215e565b600082516129858184602087016126a3565b919091019291505056fea2646970667358221220882fa86b9a6ef45c69c75f5f21e8f130ef420e9452af697fd024a55a38ef108464736f6c63430008160033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
