{
  "_format": "hh-sol-artifact-1",
  "contractName": "AccessManagerUpgradeable",
  "sourceName": "contracts/access/manager/AccessManagerUpgradeable.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        }
      ],
      "name": "AccessManagerAlreadyScheduled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccessManagerBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        }
      ],
      "name": "AccessManagerExpired",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialAdmin",
          "type": "address"
        }
      ],
      "name": "AccessManagerInvalidInitialAdmin",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "AccessManagerLockedFunction",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "AccessManagerLockedRole",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        }
      ],
      "name": "AccessManagerNotReady",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        }
      ],
      "name": "AccessManagerNotScheduled",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "msgsender",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "AccessManagerUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "AccessManagerUnauthorizedCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "msgsender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "AccessManagerUnauthorizedCancel",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AccessManagerUnauthorizedConsume",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        }
      ],
      "name": "OperationCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        }
      ],
      "name": "OperationExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "schedule",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "OperationScheduled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "admin",
          "type": "uint64"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "delay",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "since",
          "type": "uint48"
        }
      ],
      "name": "RoleGrantDelayChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "delay",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "since",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "newMember",
          "type": "bool"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "guardian",
          "type": "uint64"
        }
      ],
      "name": "RoleGuardianChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "label",
          "type": "string"
        }
      ],
      "name": "RoleLabel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "delay",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint48",
          "name": "since",
          "type": "uint48"
        }
      ],
      "name": "TargetAdminDelayUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "closed",
          "type": "bool"
        }
      ],
      "name": "TargetClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "TargetFunctionRoleUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PUBLIC_ROLE",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "canCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "immediate",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "delay",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "cancel",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "consumeScheduledOp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "expiration",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAccess",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "since",
          "type": "uint48"
        },
        {
          "internalType": "uint32",
          "name": "currentDelay",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "pendingDelay",
          "type": "uint32"
        },
        {
          "internalType": "uint48",
          "name": "effect",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "getNonce",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "getRoleGrantDelay",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "getRoleGuardian",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "getSchedule",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "getTargetAdminDelay",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "getTargetFunctionRole",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "executionDelay",
          "type": "uint32"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isMember",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "executionDelay",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "hashOperation",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialAdmin",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "isTargetClosed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        }
      ],
      "name": "labelRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minSetback",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint48",
          "name": "when",
          "type": "uint48"
        }
      ],
      "name": "schedule",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "uint32",
          "name": "newDelay",
          "type": "uint32"
        }
      ],
      "name": "setGrantDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "admin",
          "type": "uint64"
        }
      ],
      "name": "setRoleAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "guardian",
          "type": "uint64"
        }
      ],
      "name": "setRoleGuardian",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "newDelay",
          "type": "uint32"
        }
      ],
      "name": "setTargetAdminDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "closed",
          "type": "bool"
        }
      ],
      "name": "setTargetClosed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes4[]",
          "name": "selectors",
          "type": "bytes4[]"
        },
        {
          "internalType": "uint64",
          "name": "roleId",
          "type": "uint64"
        }
      ],
      "name": "setTargetFunctionRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newAuthority",
          "type": "address"
        }
      ],
      "name": "updateAuthority",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60808060405234601d57d3601d57d2601d57612a5d90816100228239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806308d6122d146114da5780630b0a93ba1461149c57806312be87271461146f578063167bd395146113cd57806318ff183c146113315780631cff79cd146111ce57806325c471a0146111755780633078f1141461111057806330cae1871461106b5780633adc277a146110325780633ca7c02a146110065780634136a33c14610fbd5780634665096d14610f955780634c1da1e214610f595780635296295214610e90578063530dd45614610e445780636d5115bd14610dcc57806375b238fc14610da6578063853551b814610cf657806394c7d7ee14610c26578063a166aa8914610bee578063a64d95ce14610adf578063abd9bd2a14610ab0578063ac9650d8146108f9578063b7009613146108aa578063b7d2b1621461086d578063c4d66de8146106e0578063cc1b6c81146106b8578063d1f856ee14610669578063d22b598914610576578063d6bb62c61461043e578063f801a698146101e15763fe0776f514610185575f80fd5b346101de57d36101de57d26101de5760403660031901126101de576101a8611660565b6101b0611611565b90336001600160a01b038316036101cf57906101cb91612278565b5080f35b635f159e6360e01b8352600483fd5b80fd5b50346101de57d36101de57d26101de5760603660031901126101de576102056115f2565b906024356001600160401b03811161043a5761022590369060040161168c565b919060443565ffffffffffff81168091036104365761024684838733611c70565b905061026263ffffffff6102594261296a565b92168092611b9f565b9015801561041b575b6103e2579065ffffffffffff809216908180821191180218169061029184828733611946565b938484525f805160206129ba83398151915260205265ffffffffffff60408520541680151590816103d1575b506103bd5760409584936103ae87947f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b494868b99525f805160206129ba833981519152602052600163ffffffff8a8a205460301c160163ffffffff81169989898c9b525f805160206129ba83398151915260205281812065ffffffffffff881665ffffffffffff198254161790558981525f805160206129ba833981519152602052209069ffffffff00000000000082549160301b169069ffffffff00000000000019161790558a51948594855233602086015260018060a01b03168b8501526080606085015260808401916118f7565b0390a382519182526020820152f35b63813e945960e01b84526004859052602484fd5b6103db9150612222565b155f6102bd565b606484876103f08887611cb7565b6381c6f24b60e01b8352336004526001600160a01b039091166024526001600160e01b031916604452fd5b50811515801561026b575065ffffffffffff8116821061026b565b8280fd5b5080fd5b50346101de57d36101de57d26101de5761045736611718565b610465818394969593611cb7565b9061047281858886611946565b938486525f805160206129ba83398151915260205265ffffffffffff604087205416155f146104af5763060a299b60e41b86526004859052602486fd5b906104bb918785612313565b1561053657602084848082525f805160206129ba83398151915283526040822065ffffffffffff1981541690558082525f805160206129ba833981519152835263ffffffff604083205460301c1680917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f76040519480a38152f35b604051630ff89d4760e21b81523360048201526001600160a01b03928316602482015291851660448301526001600160e01b031916606482015260849150fd5b50346101de57d36101de57d26101de5760403660031901126101de5761059a6115f2565b7fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c6105c3611705565b916105cc611bd1565b60018060a01b0316918284525f805160206129da833981519152602052610603816001600160701b0360016040882001541661283f565b91908486525f805160206129da8339815191526020526001600160701b036001604088200191166001600160701b03198254161790556106636040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b0390a280f35b50346101de57d36101de57d26101de5760403660031901126101de5761069e610690611660565b610698611611565b90611b62565b60408051921515835263ffffffff91909116602083015290f35b50346101de57d36101de57d26101de57806003193601126101de576020604051620697808152f35b50346101de57d36101de57d26101de5760203660031901126101de576107046115f2565b5f805160206129fa83398151915254906001600160401b0360ff8360401c1615921680159081610865575b600114908161085b575b159081610852575b50610843578160016001600160401b03195f805160206129fa8339815191525416175f805160206129fa8339815191525561080e575b61077f61293f565b61078761293f565b6001600160a01b038116156107fa5761079f90611e79565b506107a75780f35b60ff60401b195f805160206129fa83398151915254165f805160206129fa833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b630409d6d160e11b83526004839052602483fd5b6801000000000000000060ff60401b195f805160206129fa8339815191525416175f805160206129fa83398151915255610777565b63f92ee8a960e01b8352600483fd5b9050155f610741565b303b159150610739565b83915061072f565b50346101de57d36101de57d26101de5760403660031901126101de576101cb610894611660565b61089c611611565b906108a5611bd1565b612278565b50346101de57d36101de57d26101de5760603660031901126101de576108ce6115f2565b6108d6611611565b604435916001600160e01b0319831683036108f55761069e93506119d4565b8380fd5b50346101de57d36101de57d26101de5760203660031901126101de576004356001600160401b03811161043a57610934903690600401611630565b9060206040516109448282611823565b84815281810191601f19810136843761095c85611995565b9361096a6040519586611823565b858552601f1961097987611995565b01875b818110610aa157505036819003601e190190875b87811015610a29578060051b82013583811215610a25578201908135916001600160401b038311610a215785018236038113610a2157826109ff610a05928d898c6001986040519687958487013784018281018481528e519283915e010190815203601f198101835282611823565b30612256565b610a0f828a6119ac565b52610a1a81896119ac565b5001610990565b8a80fd5b8980fd5b88848860405191808301818452825180915260408401918060408360051b870101940192865b838810610a5c5786860387f35b9091929394838080600193603f198b8203018752818a518051918291828552018484015e86838284010152601f80199101160101970193019701969093929193610a4f565b6060878201850152830161097c565b50346101de57d36101de57d26101de576020610ad7610ace36611718565b92919091611946565b604051908152f35b50346101de57d36101de57d26101de5760403660031901126101de57610b03611660565b610b0b611705565b610b13611bd1565b6001600160401b038216916001600160401b038314610bda5781816001610b757ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b48956001600160701b0383610b6a610b7d9861177c565b015460801c1661283f565b94909261177c565b0180546dffffffffffffffffffffffffffff60801b191660809290921b6dffffffffffffffffffffffffffff60801b169190911790556040805163ffffffff909216825265ffffffffffff90921660208201529081908101610663565b63061c6a4360e21b84526004839052602484fd5b50346101de57d36101de57d26101de5760203660031901126101de576020610c1c610c176115f2565b611917565b6040519015158152f35b50346101de57d36101de57d26101de57610c3f366116b9565b91604051638fb3603760e01b8152602081600481335afa908115610ceb578591610ca4575b506001600160e01b03191663704c9fc960e01b01610c915791610c8c916101cb933390611946565b611ccd565b630641fee960e31b845233600452602484fd5b90506020813d602011610ce3575b81610cbf60209383611823565b81010312610cdf57516001600160e01b031981168103610cdf575f610c64565b8480fd5b3d9150610cb2565b6040513d87823e3d90fd5b50346101de57d36101de57d26101de5760403660031901126101de57610d1a611660565b602435906001600160401b03821161043657610d426001600160401b0392369060040161168c565b929091610d4d611bd1565b169182158015610d96575b610bda57907f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a450916106636040519283926020845260208401916118f7565b506001600160401b038314610d58565b50346101de57d36101de57d26101de57806003193601126101de57602090604051908152f35b50346101de57d36101de57d26101de5760403660031901126101de57610df06115f2565b6024359063ffffffff60e01b8216809203610436576001600160a01b031682525f805160206129da83398151915260209081526040808420928452918152918190205490516001600160401b039091168152f35b50346101de57d36101de57d26101de5760203660031901126101de5760206001600160401b036001610e7c610e77611660565b61177c565b0154166001600160401b0360405191168152f35b50346101de57d36101de57d26101de5760403660031901126101de57610eb4611660565b610ebc611676565b610ec4611bd1565b6001600160401b0382169182158015610f49575b610bda57906001610ef06001600160401b039361177c565b0180546fffffffffffffffff00000000000000001916604083901b6fffffffffffffffff00000000000000001617905516907f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae28380a380f35b506001600160401b038314610ed8565b50346101de57d36101de57d26101de5760203660031901126101de576020610f87610f826115f2565b6118bf565b63ffffffff60405191168152f35b50346101de57d36101de57d26101de57806003193601126101de57602060405162093a808152f35b50346101de57d36101de57d26101de5760203660031901126101de5763ffffffff604060209260043581525f805160206129ba8339815191528452205460301c16604051908152f35b50346101de57d36101de57d26101de57806003193601126101de5760206040516001600160401b038152f35b50346101de57d36101de57d26101de5760203660031901126101de57602061105b600435611889565b65ffffffffffff60405191168152f35b50346101de57d36101de57d26101de5760403660031901126101de5761108f611660565b611097611676565b61109f611bd1565b6001600160401b0382169182158015611100575b610bda579060016110cb6001600160401b039361177c565b01828216831982541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408380a380f35b506001600160401b0383146110b3565b50346101de57d36101de57d26101de5760403660031901126101de57608063ffffffff65ffffffffffff81611154611146611660565b61114e611611565b90611844565b93929590918560405197168752166020860152166040840152166060820152f35b50346101de57d36101de57d26101de5760603660031901126101de57611199611660565b6111a1611611565b906044359063ffffffff821682036108f5576101cb926111bf611bd1565b6111c8826117ce565b9161206a565b506111d8366116b9565b90916111e682848333611c70565b93901580611323575b611315576111ff83828433611946565b63ffffffff869516158015906112fc575b6112ea575b505f8051602061299a83398151915254926112586112338284611cb7565b6001600160a01b0385165f9081526001600160e01b0319919091166020526040902090565b5f8051602061299a833981519152556001600160401b0381116112d6576040519161128d601f8301601f191660200184611823565b81835236828201116112d2579560208284938299836112b498970137830101523491611db2565b505f8051602061299a8339815191525563ffffffff60405191168152f35b8680fd5b634e487b7160e01b86526041600452602486fd5b6112f5919450611ccd565b925f611215565b5065ffffffffffff61130d82611889565b161515611210565b906103f06064938693611cb7565b5063ffffffff8416156111ef565b50346113c957d36113c957d26113c95760403660031901126113c9576113556115f2565b61135d611611565b90611366611bd1565b6001600160a01b031690813b156113c957604051637a9e5e4b60e01b81526001600160a01b039091166004820152905f908290602490829084905af180156113be576113b0575080f35b6113bc91505f90611823565b005b6040513d5f823e3d90fd5b5f80fd5b346113c957d36113c957d26113c95760403660031901126113c9576113f06115f2565b602435908115158092036113c95760207f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb1389161142a611bd1565b6001600160a01b03165f8181525f805160206129da8339815191528352604090819020600101805460ff60701b1916607087901b60ff60701b161790555193845292a2005b346113c957d36113c957d26113c95760203660031901126113c9576020610f87611497611660565b6117ce565b346113c957d36113c957d26113c95760203660031901126113c95760206114c96114c4611660565b6117b2565b6001600160401b0360405191168152f35b346113c957d36113c957d26113c95760603660031901126113c9576114fd6115f2565b6024356001600160401b0381116113c95761151c903690600401611630565b9190604435906001600160401b0382168092036113c95761153e939293611bd1565b6001600160a01b03909316925f5b838110156113bc578060051b82013563ffffffff60e01b81168091036113c957637a9e5e4b60e01b81146115e0579083867f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde9491516020600195835f525f805160206129da833981519152825260405f20815f52825260405f20856001600160401b0319825416179055604051908152a30161154c565b637a3a272560e11b5f5260045260245ffd5b6004356001600160a81b03811681036113c9576001600160a01b031690565b6024356001600160a81b03811681036113c9576001600160a01b031690565b9181601f840112156113c9578235916001600160401b0383116113c9576020808501948460051b0101116113c957565b600435906001600160401b03821682036113c957565b602435906001600160401b03821682036113c957565b9181601f840112156113c9578235916001600160401b0383116113c957602083818601950101116113c957565b9060406003198301126113c9576004356001600160a81b03811681036113c9576001600160a01b031691602435906001600160401b0382116113c9576117019160040161168c565b9091565b6024359063ffffffff821682036113c957565b60606003198201126113c9576004356001600160a81b03811681036113c9576001600160a01b0316916024356001600160a81b03811681036113c9576001600160a01b031691604435906001600160401b0382116113c9576117019160040161168c565b6001600160401b03165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b60016117c56001600160401b039261177c565b015460401c1690565b6001600160701b0360016117e46117ef9361177c565b015460801c166121e5565b505090565b604081019081106001600160401b0382111761180f57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761180f57604052565b9061185665ffffffffffff939261177c565b9060018060a01b03165f5260205260405f20549061187f6001600160701b038360301c166121e5565b9490931693909291565b5f525f805160206129ba83398151915260205265ffffffffffff60405f2054166118b281612222565b156118bc57505f90565b90565b6001600160a01b03165f9081525f805160206129da83398151915260205260409020600101546117ef906001600160701b03166121e5565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b03165f9081525f805160206129da833981519152602052604090206001015460701c60ff1690565b604080516001600160a01b0392831660208201908152929093169083015260608083015292909161198f9183916119819160808401916118f7565b03601f198101835282611823565b51902090565b6001600160401b03811161180f5760051b60200190565b80518210156119c05760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9190916119e083611917565b156119ee575050505f905f90565b6001600160a01b0381163003611a3757505f8051602061299a833981519152546001600160a01b039092165f9081526001600160e01b0319909116602052604090205b14905f90565b919291906001600160e01b031916637a9e5e4b60e01b8103611a915750611a6f63ffffffff80611a678194611ae1565b9390966118bf565b9216911690818082119118021816915f14611a8a5781159190565b5f91508190565b611ace929360018060a01b03165f525f805160206129da83398151915260205260405f20905f526020526001600160401b0360405f205416611b62565b919015611a8a5763ffffffff8216159190565b6001600160a01b03165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff81169190611b379060301c6001600160701b03166121e5565b509092801515915081611b4957509190565b905065ffffffffffff611b5b4261296a565b1610159190565b6001600160401b0381811603611b7b5750506001905f90565b65ffffffffffff9291611b8d91611844565b505092168015159081611b4957509190565b9065ffffffffffff8091169116019065ffffffffffff8211611bbd57565b634e487b7160e01b5f52601160045260245ffd5b611bdb36336123ef565b9015611be45750565b63ffffffff16611c19576001600160401b03611bff366124fb565b50905063f07e038f60e01b5f52336004521660245260445ffd5b611c6d6040516020810190338252306040820152606080820152611c6581602060808201368152365f838301375f823683010152601f19601f360116010103601f198101835282611823565b519020611ccd565b50565b909291906001600160a01b0384163003611c8e5761170193506124a0565b9192906004841015611ca457505050505f905f90565b61170193611cb191611cb7565b916119d4565b906004116113c957356001600160e01b03191690565b5f8181525f805160206129ba8339815191526020526040902054909190603081901c63ffffffff169065ffffffffffff1680611d16578363060a299b60e41b5f5260045260245ffd5b65ffffffffffff611d264261296a565b16811115611d415783630c65b5bd60e11b5f5260045260245ffd5b611d4e9093919293612222565b611da0578190805f525f805160206129ba83398151915260205260405f2065ffffffffffff1981541690557f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d5f80a390565b631e2975b960e21b5f5260045260245ffd5b91804710611e3757815f92916020849351920190855af18080611e24575b15611ddf5750506118bc612826565b15611e0457639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b3d15611e15576040513d5f823e3d90fd5b63d6bda27560e01b5f5260045ffd5b503d151580611dd05750813b1515611dd0565b4763cf47918160e01b5f5260045260245260445ffd5b906601000000000000600160a01b0382549160301b16906601000000000000600160a01b031916179055565b6001600160a01b0381165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff1615908115611fa9575f7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf6060611ef683611ef14261296a565b611b9f565b93611f7f604051611f06816117f4565b65ffffffffffff871681526001600160701b03602082018781528780527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020526040882060018060a01b038616895260205265ffffffffffff8060408a209451161665ffffffffffff19845416178355511690611e4d565b6040805185815265ffffffffffff96909616602087015285018690526001600160a01b031693a390565b6001600160a01b0381165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc67090976020526040812054612065927ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf916060919061202190859060301c6001600160701b03166128d7565b95908580527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020526040862060018060a01b038416875260205260408620611e4d565b611f7f565b909291926001600160401b038216916001600160401b0383146121d2577ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9165ffffffffffff826120bc60609461177c565b60018060a01b0384165f526020528160405f2054161597885f14612175576120f76121509163ffffffff6120ef4261296a565b911690611b9f565b916001600160701b036040519161210d836117f4565b8585168352612128602084019163ffffffff8d16835261177c565b60018060a01b0388165f52602052858060405f20945116168619845416178355511690611e4d565b63ffffffff6040519716875216602086015285604086015260018060a01b031693a390565b506121cd816121866121b69361177c565b60018060a01b0386165f526020526121ae896001600160701b0360405f205460301c166128d7565b93909161177c565b60018060a01b0386165f5260205260405f20611e4d565b612150565b8263061c6a4360e21b5f5260045260245ffd5b6121ee4261296a565b63ffffffff82169165ffffffffffff604082901c811692168211612216575090915f91508190565b60201c63ffffffff1692565b65ffffffffffff62093a8091160165ffffffffffff8111611bbd5765ffffffffffff8061224e4261296a565b169116111590565b905f8091602081519101845af48080611e245715611ddf5750506118bc612826565b906001600160401b038216916001600160401b0383146121d25761229b8161177c565b60018060a01b0383165f5260205265ffffffffffff60405f2054161561230c576122c49061177c565b6001600160a01b03919091165f8181526020929092526040822082905591907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1669080a3600190565b5050505f90565b9192916001600160a01b031633146123df5761232e33611ae1565b506123398385611cb7565b9160018060a01b031691825f525f805160206129da83398151915260205260405f209063ffffffff60e01b165f52602052612389336123846001600160401b0360405f2054166117b2565b611b62565b5081156123e7575b506123df5730146123a3575b50505f90565b6123ac916126a7565b5090806123cd575b6123be578061239d565b6123c9903390611b62565b5090565b506001600160401b03811615156123b4565b505050600190565b90505f612391565b906004811061244b576001600160a01b038216301461246b57612412905f6126a7565b929091158061245c575b6124535761242991611b62565b901561244b5763ffffffff808093169116908180821191180218169081159190565b50505f905f90565b5050505f905f90565b5061246630611917565b61241c565b90506004116113c9575f8051602061299a83398151915254305f90815280356001600160e01b03191660205260409020611a31565b919060048210612453576001600160a01b03831630146124c45790612412916126a7565b6124ce9250611cb7565b5f8051602061299a83398151915254305f9081526001600160e01b03199092166020526040909120611a31565b5f906004811061269d57806004116113c9575f356001600160e01b031916906310a6aa3760e31b8214801561268d575b801561267d575b801561266d575b801561265d575b6126515763063fc60f60e21b82148015612641575b8015612631575b6125fa5763012e238d60e51b821480156125ea575b6125a957503082525f805160206129da833981519152602052604082209082526020526001600160401b036040822054169181929190565b90506024116101de57806101de57506004356001600160401b03811681036113c95760016125de6001600160401b039261177c565b01541690600191905f90565b50635be958b160e11b8214612571565b9150506024116113c9576004356001600160a81b03811681036113c957612629906001600160a01b03166118bf565b6001915f9190565b506308d6122d60e01b821461255c565b5063167bd39560e01b8214612555565b5050506001905f905f90565b5063d22b598960e01b8214612540565b50635326cae760e11b8214612539565b5063294b14a960e11b8214612532565b506330cae18760e01b821461252b565b50505f905f905f90565b6004821061269d576001600160e01b03196126c28383611cb7565b16916310a6aa3760e31b83148015612816575b8015612806575b80156127f6575b80156127e6575b6126515763063fc60f60e21b831480156127d6575b80156127c6575b6127965763012e238d60e51b83148015612786575b612755575050305f525f805160206129da83398151915260205260405f20905f526020526001600160401b0360405f205416905f91905f90565b9091506024116113c957600401356001600160401b03811681036113c95760016125de6001600160401b039261177c565b50635be958b160e11b831461271b565b9091506024116113c957600401356001600160a81b03811681036113c957612629906001600160a01b03166118bf565b506308d6122d60e01b8314612706565b5063167bd39560e01b83146126ff565b5063d22b598960e01b83146126ea565b50635326cae760e11b83146126e3565b5063294b14a960e11b83146126dc565b506330cae18760e01b83146126d5565b604051903d82523d5f602084013e60203d830101604052565b61285063ffffffff919392936121e5565b505092168063ffffffff84168181115f146128bd570363ffffffff8111611bbd5761289e63ffffffff8067ffffffff00000000935b16806206978011816206978018021816611ef14261296a565b9360201b166dffffffffffff00000000000000008460401b1617179190565b505067ffffffff0000000061289e63ffffffff805f612885565b6128e863ffffffff919392936121e5565b505092168063ffffffff84168181115f14612926570363ffffffff8111611bbd5761289e63ffffffff67ffffffff00000000925b16611ef14261296a565b505067ffffffff0000000061289e63ffffffff5f61291c565b60ff5f805160206129fa8339815191525460401c161561295b57565b631afcd79f60e31b5f5260045ffd5b65ffffffffffff81116129825765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffdfe40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0340c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0240c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a36474726f6e58221220fbcf8b8ffd9c1d9f2028ebf535f89019f81ee8791c4ae71afe8b0b0905966bb86c6578706572696d656e74616cf564736f6c634300081a0041",
  "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f803560e01c806308d6122d146114da5780630b0a93ba1461149c57806312be87271461146f578063167bd395146113cd57806318ff183c146113315780631cff79cd146111ce57806325c471a0146111755780633078f1141461111057806330cae1871461106b5780633adc277a146110325780633ca7c02a146110065780634136a33c14610fbd5780634665096d14610f955780634c1da1e214610f595780635296295214610e90578063530dd45614610e445780636d5115bd14610dcc57806375b238fc14610da6578063853551b814610cf657806394c7d7ee14610c26578063a166aa8914610bee578063a64d95ce14610adf578063abd9bd2a14610ab0578063ac9650d8146108f9578063b7009613146108aa578063b7d2b1621461086d578063c4d66de8146106e0578063cc1b6c81146106b8578063d1f856ee14610669578063d22b598914610576578063d6bb62c61461043e578063f801a698146101e15763fe0776f514610185575f80fd5b346101de57d36101de57d26101de5760403660031901126101de576101a8611660565b6101b0611611565b90336001600160a01b038316036101cf57906101cb91612278565b5080f35b635f159e6360e01b8352600483fd5b80fd5b50346101de57d36101de57d26101de5760603660031901126101de576102056115f2565b906024356001600160401b03811161043a5761022590369060040161168c565b919060443565ffffffffffff81168091036104365761024684838733611c70565b905061026263ffffffff6102594261296a565b92168092611b9f565b9015801561041b575b6103e2579065ffffffffffff809216908180821191180218169061029184828733611946565b938484525f805160206129ba83398151915260205265ffffffffffff60408520541680151590816103d1575b506103bd5760409584936103ae87947f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b494868b99525f805160206129ba833981519152602052600163ffffffff8a8a205460301c160163ffffffff81169989898c9b525f805160206129ba83398151915260205281812065ffffffffffff881665ffffffffffff198254161790558981525f805160206129ba833981519152602052209069ffffffff00000000000082549160301b169069ffffffff00000000000019161790558a51948594855233602086015260018060a01b03168b8501526080606085015260808401916118f7565b0390a382519182526020820152f35b63813e945960e01b84526004859052602484fd5b6103db9150612222565b155f6102bd565b606484876103f08887611cb7565b6381c6f24b60e01b8352336004526001600160a01b039091166024526001600160e01b031916604452fd5b50811515801561026b575065ffffffffffff8116821061026b565b8280fd5b5080fd5b50346101de57d36101de57d26101de5761045736611718565b610465818394969593611cb7565b9061047281858886611946565b938486525f805160206129ba83398151915260205265ffffffffffff604087205416155f146104af5763060a299b60e41b86526004859052602486fd5b906104bb918785612313565b1561053657602084848082525f805160206129ba83398151915283526040822065ffffffffffff1981541690558082525f805160206129ba833981519152835263ffffffff604083205460301c1680917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f76040519480a38152f35b604051630ff89d4760e21b81523360048201526001600160a01b03928316602482015291851660448301526001600160e01b031916606482015260849150fd5b50346101de57d36101de57d26101de5760403660031901126101de5761059a6115f2565b7fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c6105c3611705565b916105cc611bd1565b60018060a01b0316918284525f805160206129da833981519152602052610603816001600160701b0360016040882001541661283f565b91908486525f805160206129da8339815191526020526001600160701b036001604088200191166001600160701b03198254161790556106636040519283928390929165ffffffffffff60209163ffffffff604085019616845216910152565b0390a280f35b50346101de57d36101de57d26101de5760403660031901126101de5761069e610690611660565b610698611611565b90611b62565b60408051921515835263ffffffff91909116602083015290f35b50346101de57d36101de57d26101de57806003193601126101de576020604051620697808152f35b50346101de57d36101de57d26101de5760203660031901126101de576107046115f2565b5f805160206129fa83398151915254906001600160401b0360ff8360401c1615921680159081610865575b600114908161085b575b159081610852575b50610843578160016001600160401b03195f805160206129fa8339815191525416175f805160206129fa8339815191525561080e575b61077f61293f565b61078761293f565b6001600160a01b038116156107fa5761079f90611e79565b506107a75780f35b60ff60401b195f805160206129fa83398151915254165f805160206129fa833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b630409d6d160e11b83526004839052602483fd5b6801000000000000000060ff60401b195f805160206129fa8339815191525416175f805160206129fa83398151915255610777565b63f92ee8a960e01b8352600483fd5b9050155f610741565b303b159150610739565b83915061072f565b50346101de57d36101de57d26101de5760403660031901126101de576101cb610894611660565b61089c611611565b906108a5611bd1565b612278565b50346101de57d36101de57d26101de5760603660031901126101de576108ce6115f2565b6108d6611611565b604435916001600160e01b0319831683036108f55761069e93506119d4565b8380fd5b50346101de57d36101de57d26101de5760203660031901126101de576004356001600160401b03811161043a57610934903690600401611630565b9060206040516109448282611823565b84815281810191601f19810136843761095c85611995565b9361096a6040519586611823565b858552601f1961097987611995565b01875b818110610aa157505036819003601e190190875b87811015610a29578060051b82013583811215610a25578201908135916001600160401b038311610a215785018236038113610a2157826109ff610a05928d898c6001986040519687958487013784018281018481528e519283915e010190815203601f198101835282611823565b30612256565b610a0f828a6119ac565b52610a1a81896119ac565b5001610990565b8a80fd5b8980fd5b88848860405191808301818452825180915260408401918060408360051b870101940192865b838810610a5c5786860387f35b9091929394838080600193603f198b8203018752818a518051918291828552018484015e86838284010152601f80199101160101970193019701969093929193610a4f565b6060878201850152830161097c565b50346101de57d36101de57d26101de576020610ad7610ace36611718565b92919091611946565b604051908152f35b50346101de57d36101de57d26101de5760403660031901126101de57610b03611660565b610b0b611705565b610b13611bd1565b6001600160401b038216916001600160401b038314610bda5781816001610b757ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b48956001600160701b0383610b6a610b7d9861177c565b015460801c1661283f565b94909261177c565b0180546dffffffffffffffffffffffffffff60801b191660809290921b6dffffffffffffffffffffffffffff60801b169190911790556040805163ffffffff909216825265ffffffffffff90921660208201529081908101610663565b63061c6a4360e21b84526004839052602484fd5b50346101de57d36101de57d26101de5760203660031901126101de576020610c1c610c176115f2565b611917565b6040519015158152f35b50346101de57d36101de57d26101de57610c3f366116b9565b91604051638fb3603760e01b8152602081600481335afa908115610ceb578591610ca4575b506001600160e01b03191663704c9fc960e01b01610c915791610c8c916101cb933390611946565b611ccd565b630641fee960e31b845233600452602484fd5b90506020813d602011610ce3575b81610cbf60209383611823565b81010312610cdf57516001600160e01b031981168103610cdf575f610c64565b8480fd5b3d9150610cb2565b6040513d87823e3d90fd5b50346101de57d36101de57d26101de5760403660031901126101de57610d1a611660565b602435906001600160401b03821161043657610d426001600160401b0392369060040161168c565b929091610d4d611bd1565b169182158015610d96575b610bda57907f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a450916106636040519283926020845260208401916118f7565b506001600160401b038314610d58565b50346101de57d36101de57d26101de57806003193601126101de57602090604051908152f35b50346101de57d36101de57d26101de5760403660031901126101de57610df06115f2565b6024359063ffffffff60e01b8216809203610436576001600160a01b031682525f805160206129da83398151915260209081526040808420928452918152918190205490516001600160401b039091168152f35b50346101de57d36101de57d26101de5760203660031901126101de5760206001600160401b036001610e7c610e77611660565b61177c565b0154166001600160401b0360405191168152f35b50346101de57d36101de57d26101de5760403660031901126101de57610eb4611660565b610ebc611676565b610ec4611bd1565b6001600160401b0382169182158015610f49575b610bda57906001610ef06001600160401b039361177c565b0180546fffffffffffffffff00000000000000001916604083901b6fffffffffffffffff00000000000000001617905516907f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae28380a380f35b506001600160401b038314610ed8565b50346101de57d36101de57d26101de5760203660031901126101de576020610f87610f826115f2565b6118bf565b63ffffffff60405191168152f35b50346101de57d36101de57d26101de57806003193601126101de57602060405162093a808152f35b50346101de57d36101de57d26101de5760203660031901126101de5763ffffffff604060209260043581525f805160206129ba8339815191528452205460301c16604051908152f35b50346101de57d36101de57d26101de57806003193601126101de5760206040516001600160401b038152f35b50346101de57d36101de57d26101de5760203660031901126101de57602061105b600435611889565b65ffffffffffff60405191168152f35b50346101de57d36101de57d26101de5760403660031901126101de5761108f611660565b611097611676565b61109f611bd1565b6001600160401b0382169182158015611100575b610bda579060016110cb6001600160401b039361177c565b01828216831982541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63408380a380f35b506001600160401b0383146110b3565b50346101de57d36101de57d26101de5760403660031901126101de57608063ffffffff65ffffffffffff81611154611146611660565b61114e611611565b90611844565b93929590918560405197168752166020860152166040840152166060820152f35b50346101de57d36101de57d26101de5760603660031901126101de57611199611660565b6111a1611611565b906044359063ffffffff821682036108f5576101cb926111bf611bd1565b6111c8826117ce565b9161206a565b506111d8366116b9565b90916111e682848333611c70565b93901580611323575b611315576111ff83828433611946565b63ffffffff869516158015906112fc575b6112ea575b505f8051602061299a83398151915254926112586112338284611cb7565b6001600160a01b0385165f9081526001600160e01b0319919091166020526040902090565b5f8051602061299a833981519152556001600160401b0381116112d6576040519161128d601f8301601f191660200184611823565b81835236828201116112d2579560208284938299836112b498970137830101523491611db2565b505f8051602061299a8339815191525563ffffffff60405191168152f35b8680fd5b634e487b7160e01b86526041600452602486fd5b6112f5919450611ccd565b925f611215565b5065ffffffffffff61130d82611889565b161515611210565b906103f06064938693611cb7565b5063ffffffff8416156111ef565b50346113c957d36113c957d26113c95760403660031901126113c9576113556115f2565b61135d611611565b90611366611bd1565b6001600160a01b031690813b156113c957604051637a9e5e4b60e01b81526001600160a01b039091166004820152905f908290602490829084905af180156113be576113b0575080f35b6113bc91505f90611823565b005b6040513d5f823e3d90fd5b5f80fd5b346113c957d36113c957d26113c95760403660031901126113c9576113f06115f2565b602435908115158092036113c95760207f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb1389161142a611bd1565b6001600160a01b03165f8181525f805160206129da8339815191528352604090819020600101805460ff60701b1916607087901b60ff60701b161790555193845292a2005b346113c957d36113c957d26113c95760203660031901126113c9576020610f87611497611660565b6117ce565b346113c957d36113c957d26113c95760203660031901126113c95760206114c96114c4611660565b6117b2565b6001600160401b0360405191168152f35b346113c957d36113c957d26113c95760603660031901126113c9576114fd6115f2565b6024356001600160401b0381116113c95761151c903690600401611630565b9190604435906001600160401b0382168092036113c95761153e939293611bd1565b6001600160a01b03909316925f5b838110156113bc578060051b82013563ffffffff60e01b81168091036113c957637a9e5e4b60e01b81146115e0579083867f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde9491516020600195835f525f805160206129da833981519152825260405f20815f52825260405f20856001600160401b0319825416179055604051908152a30161154c565b637a3a272560e11b5f5260045260245ffd5b6004356001600160a81b03811681036113c9576001600160a01b031690565b6024356001600160a81b03811681036113c9576001600160a01b031690565b9181601f840112156113c9578235916001600160401b0383116113c9576020808501948460051b0101116113c957565b600435906001600160401b03821682036113c957565b602435906001600160401b03821682036113c957565b9181601f840112156113c9578235916001600160401b0383116113c957602083818601950101116113c957565b9060406003198301126113c9576004356001600160a81b03811681036113c9576001600160a01b031691602435906001600160401b0382116113c9576117019160040161168c565b9091565b6024359063ffffffff821682036113c957565b60606003198201126113c9576004356001600160a81b03811681036113c9576001600160a01b0316916024356001600160a81b03811681036113c9576001600160a01b031691604435906001600160401b0382116113c9576117019160040161168c565b6001600160401b03165f527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0160205260405f2090565b60016117c56001600160401b039261177c565b015460401c1690565b6001600160701b0360016117e46117ef9361177c565b015460801c166121e5565b505090565b604081019081106001600160401b0382111761180f57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761180f57604052565b9061185665ffffffffffff939261177c565b9060018060a01b03165f5260205260405f20549061187f6001600160701b038360301c166121e5565b9490931693909291565b5f525f805160206129ba83398151915260205265ffffffffffff60405f2054166118b281612222565b156118bc57505f90565b90565b6001600160a01b03165f9081525f805160206129da83398151915260205260409020600101546117ef906001600160701b03166121e5565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b03165f9081525f805160206129da833981519152602052604090206001015460701c60ff1690565b604080516001600160a01b0392831660208201908152929093169083015260608083015292909161198f9183916119819160808401916118f7565b03601f198101835282611823565b51902090565b6001600160401b03811161180f5760051b60200190565b80518210156119c05760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9190916119e083611917565b156119ee575050505f905f90565b6001600160a01b0381163003611a3757505f8051602061299a833981519152546001600160a01b039092165f9081526001600160e01b0319909116602052604090205b14905f90565b919291906001600160e01b031916637a9e5e4b60e01b8103611a915750611a6f63ffffffff80611a678194611ae1565b9390966118bf565b9216911690818082119118021816915f14611a8a5781159190565b5f91508190565b611ace929360018060a01b03165f525f805160206129da83398151915260205260405f20905f526020526001600160401b0360405f205416611b62565b919015611a8a5763ffffffff8216159190565b6001600160a01b03165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff81169190611b379060301c6001600160701b03166121e5565b509092801515915081611b4957509190565b905065ffffffffffff611b5b4261296a565b1610159190565b6001600160401b0381811603611b7b5750506001905f90565b65ffffffffffff9291611b8d91611844565b505092168015159081611b4957509190565b9065ffffffffffff8091169116019065ffffffffffff8211611bbd57565b634e487b7160e01b5f52601160045260245ffd5b611bdb36336123ef565b9015611be45750565b63ffffffff16611c19576001600160401b03611bff366124fb565b50905063f07e038f60e01b5f52336004521660245260445ffd5b611c6d6040516020810190338252306040820152606080820152611c6581602060808201368152365f838301375f823683010152601f19601f360116010103601f198101835282611823565b519020611ccd565b50565b909291906001600160a01b0384163003611c8e5761170193506124a0565b9192906004841015611ca457505050505f905f90565b61170193611cb191611cb7565b916119d4565b906004116113c957356001600160e01b03191690565b5f8181525f805160206129ba8339815191526020526040902054909190603081901c63ffffffff169065ffffffffffff1680611d16578363060a299b60e41b5f5260045260245ffd5b65ffffffffffff611d264261296a565b16811115611d415783630c65b5bd60e11b5f5260045260245ffd5b611d4e9093919293612222565b611da0578190805f525f805160206129ba83398151915260205260405f2065ffffffffffff1981541690557f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d5f80a390565b631e2975b960e21b5f5260045260245ffd5b91804710611e3757815f92916020849351920190855af18080611e24575b15611ddf5750506118bc612826565b15611e0457639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b3d15611e15576040513d5f823e3d90fd5b63d6bda27560e01b5f5260045ffd5b503d151580611dd05750813b1515611dd0565b4763cf47918160e01b5f5260045260245260445ffd5b906601000000000000600160a01b0382549160301b16906601000000000000600160a01b031916179055565b6001600160a01b0381165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc6709097602052604090205465ffffffffffff1615908115611fa9575f7ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf6060611ef683611ef14261296a565b611b9f565b93611f7f604051611f06816117f4565b65ffffffffffff871681526001600160701b03602082018781528780527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020526040882060018060a01b038616895260205265ffffffffffff8060408a209451161665ffffffffffff19845416178355511690611e4d565b6040805185815265ffffffffffff96909616602087015285018690526001600160a01b031693a390565b6001600160a01b0381165f9081527f7b4501b7c347294b6ab7642a0f3ba6ad26efef1601fdfb1d54a7ff5bc67090976020526040812054612065927ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf916060919061202190859060301c6001600160701b03166128d7565b95908580527f40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad016020526040862060018060a01b038416875260205260408620611e4d565b611f7f565b909291926001600160401b038216916001600160401b0383146121d2577ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9165ffffffffffff826120bc60609461177c565b60018060a01b0384165f526020528160405f2054161597885f14612175576120f76121509163ffffffff6120ef4261296a565b911690611b9f565b916001600160701b036040519161210d836117f4565b8585168352612128602084019163ffffffff8d16835261177c565b60018060a01b0388165f52602052858060405f20945116168619845416178355511690611e4d565b63ffffffff6040519716875216602086015285604086015260018060a01b031693a390565b506121cd816121866121b69361177c565b60018060a01b0386165f526020526121ae896001600160701b0360405f205460301c166128d7565b93909161177c565b60018060a01b0386165f5260205260405f20611e4d565b612150565b8263061c6a4360e21b5f5260045260245ffd5b6121ee4261296a565b63ffffffff82169165ffffffffffff604082901c811692168211612216575090915f91508190565b60201c63ffffffff1692565b65ffffffffffff62093a8091160165ffffffffffff8111611bbd5765ffffffffffff8061224e4261296a565b169116111590565b905f8091602081519101845af48080611e245715611ddf5750506118bc612826565b906001600160401b038216916001600160401b0383146121d25761229b8161177c565b60018060a01b0383165f5260205265ffffffffffff60405f2054161561230c576122c49061177c565b6001600160a01b03919091165f8181526020929092526040822082905591907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1669080a3600190565b5050505f90565b9192916001600160a01b031633146123df5761232e33611ae1565b506123398385611cb7565b9160018060a01b031691825f525f805160206129da83398151915260205260405f209063ffffffff60e01b165f52602052612389336123846001600160401b0360405f2054166117b2565b611b62565b5081156123e7575b506123df5730146123a3575b50505f90565b6123ac916126a7565b5090806123cd575b6123be578061239d565b6123c9903390611b62565b5090565b506001600160401b03811615156123b4565b505050600190565b90505f612391565b906004811061244b576001600160a01b038216301461246b57612412905f6126a7565b929091158061245c575b6124535761242991611b62565b901561244b5763ffffffff808093169116908180821191180218169081159190565b50505f905f90565b5050505f905f90565b5061246630611917565b61241c565b90506004116113c9575f8051602061299a83398151915254305f90815280356001600160e01b03191660205260409020611a31565b919060048210612453576001600160a01b03831630146124c45790612412916126a7565b6124ce9250611cb7565b5f8051602061299a83398151915254305f9081526001600160e01b03199092166020526040909120611a31565b5f906004811061269d57806004116113c9575f356001600160e01b031916906310a6aa3760e31b8214801561268d575b801561267d575b801561266d575b801561265d575b6126515763063fc60f60e21b82148015612641575b8015612631575b6125fa5763012e238d60e51b821480156125ea575b6125a957503082525f805160206129da833981519152602052604082209082526020526001600160401b036040822054169181929190565b90506024116101de57806101de57506004356001600160401b03811681036113c95760016125de6001600160401b039261177c565b01541690600191905f90565b50635be958b160e11b8214612571565b9150506024116113c9576004356001600160a81b03811681036113c957612629906001600160a01b03166118bf565b6001915f9190565b506308d6122d60e01b821461255c565b5063167bd39560e01b8214612555565b5050506001905f905f90565b5063d22b598960e01b8214612540565b50635326cae760e11b8214612539565b5063294b14a960e11b8214612532565b506330cae18760e01b821461252b565b50505f905f905f90565b6004821061269d576001600160e01b03196126c28383611cb7565b16916310a6aa3760e31b83148015612816575b8015612806575b80156127f6575b80156127e6575b6126515763063fc60f60e21b831480156127d6575b80156127c6575b6127965763012e238d60e51b83148015612786575b612755575050305f525f805160206129da83398151915260205260405f20905f526020526001600160401b0360405f205416905f91905f90565b9091506024116113c957600401356001600160401b03811681036113c95760016125de6001600160401b039261177c565b50635be958b160e11b831461271b565b9091506024116113c957600401356001600160a81b03811681036113c957612629906001600160a01b03166118bf565b506308d6122d60e01b8314612706565b5063167bd39560e01b83146126ff565b5063d22b598960e01b83146126ea565b50635326cae760e11b83146126e3565b5063294b14a960e11b83146126dc565b506330cae18760e01b83146126d5565b604051903d82523d5f602084013e60203d830101604052565b61285063ffffffff919392936121e5565b505092168063ffffffff84168181115f146128bd570363ffffffff8111611bbd5761289e63ffffffff8067ffffffff00000000935b16806206978011816206978018021816611ef14261296a565b9360201b166dffffffffffff00000000000000008460401b1617179190565b505067ffffffff0000000061289e63ffffffff805f612885565b6128e863ffffffff919392936121e5565b505092168063ffffffff84168181115f14612926570363ffffffff8111611bbd5761289e63ffffffff67ffffffff00000000925b16611ef14261296a565b505067ffffffff0000000061289e63ffffffff5f61291c565b60ff5f805160206129fa8339815191525460401c161561295b57565b631afcd79f60e31b5f5260045ffd5b65ffffffffffff81116129825765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffdfe40c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0340c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad0240c6c8c28789853c7efd823ab20824bbd71718a8a5915e855f6f288c9a26ad00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a36474726f6e58221220fbcf8b8ffd9c1d9f2028ebf535f89019f81ee8791c4ae71afe8b0b0905966bb86c6578706572696d656e74616cf564736f6c634300081a0041",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
