@settlemint/solidity-attestation-service
Version:
Smart contract set to use the Ethereum Attestation Service in SettleMint
1,195 lines (1,193 loc) • 104 kB
TypeScript
// This file was autogenerated by hardhat-viem, do not edit it.
// prettier-ignore
// tslint:disable
// eslint-disable
import type { Address } from "viem";
import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
import "@nomicfoundation/hardhat-viem/types";
export interface CustomEAS$Type {
"_format": "hh-sol-artifact-1",
"contractName": "CustomEAS",
"sourceName": "contracts/CustomEAS.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract ISchemaRegistry",
"name": "registry",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AccessDenied",
"type": "error"
},
{
"inputs": [],
"name": "AlreadyRevoked",
"type": "error"
},
{
"inputs": [],
"name": "AlreadyRevokedOffchain",
"type": "error"
},
{
"inputs": [],
"name": "AlreadyTimestamped",
"type": "error"
},
{
"inputs": [],
"name": "DeadlineExpired",
"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": "InsufficientValue",
"type": "error"
},
{
"inputs": [],
"name": "InvalidAttestation",
"type": "error"
},
{
"inputs": [],
"name": "InvalidAttestations",
"type": "error"
},
{
"inputs": [],
"name": "InvalidExpirationTime",
"type": "error"
},
{
"inputs": [],
"name": "InvalidLength",
"type": "error"
},
{
"inputs": [],
"name": "InvalidNonce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidOffset",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRegistry",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRevocation",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRevocations",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSchema",
"type": "error"
},
{
"inputs": [],
"name": "InvalidShortString",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSignature",
"type": "error"
},
{
"inputs": [],
"name": "InvalidVerifier",
"type": "error"
},
{
"inputs": [],
"name": "Irrevocable",
"type": "error"
},
{
"inputs": [],
"name": "NotFound",
"type": "error"
},
{
"inputs": [],
"name": "NotPayable",
"type": "error"
},
{
"inputs": [
{
"internalType": "string",
"name": "str",
"type": "string"
}
],
"name": "StringTooLong",
"type": "error"
},
{
"inputs": [],
"name": "WrongSchema",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "attester",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "schemaUID",
"type": "bytes32"
}
],
"name": "Attested",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newNonce",
"type": "uint256"
}
],
"name": "NonceIncreased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "attester",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "schemaUID",
"type": "bytes32"
}
],
"name": "Revoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "revoker",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint64",
"name": "timestamp",
"type": "uint64"
}
],
"name": "RevokedOffchain",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint64",
"name": "timestamp",
"type": "uint64"
}
],
"name": "Timestamped",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint64",
"name": "expirationTime",
"type": "uint64"
},
{
"internalType": "bool",
"name": "revocable",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "refUID",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct AttestationRequestData",
"name": "data",
"type": "tuple"
}
],
"internalType": "struct AttestationRequest",
"name": "request",
"type": "tuple"
}
],
"name": "attest",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint64",
"name": "expirationTime",
"type": "uint64"
},
{
"internalType": "bool",
"name": "revocable",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "refUID",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct AttestationRequestData",
"name": "data",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"internalType": "struct Signature",
"name": "signature",
"type": "tuple"
},
{
"internalType": "address",
"name": "attester",
"type": "address"
},
{
"internalType": "uint64",
"name": "deadline",
"type": "uint64"
}
],
"internalType": "struct DelegatedAttestationRequest",
"name": "delegatedRequest",
"type": "tuple"
}
],
"name": "attestByDelegation",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAttestTypeHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
}
],
"name": "getAttestation",
"outputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "time",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "expirationTime",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "revocationTime",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "refUID",
"type": "bytes32"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "address",
"name": "attester",
"type": "address"
},
{
"internalType": "bool",
"name": "revocable",
"type": "bool"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"internalType": "struct Attestation",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDomainSeparator",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getName",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "revoker",
"type": "address"
},
{
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
}
],
"name": "getRevokeOffchain",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getRevokeTypeHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "getSchemaRegistry",
"outputs": [
{
"internalType": "contract ISchemaRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
}
],
"name": "getTimestamp",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newNonce",
"type": "uint256"
}
],
"name": "increaseNonce",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
}
],
"name": "isAttestationValid",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint64",
"name": "expirationTime",
"type": "uint64"
},
{
"internalType": "bool",
"name": "revocable",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "refUID",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct AttestationRequestData[]",
"name": "data",
"type": "tuple[]"
}
],
"internalType": "struct MultiAttestationRequest[]",
"name": "multiRequests",
"type": "tuple[]"
}
],
"name": "multiAttest",
"outputs": [
{
"internalType": "bytes32[]",
"name": "",
"type": "bytes32[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint64",
"name": "expirationTime",
"type": "uint64"
},
{
"internalType": "bool",
"name": "revocable",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "refUID",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct AttestationRequestData[]",
"name": "data",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"internalType": "struct Signature[]",
"name": "signatures",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "attester",
"type": "address"
},
{
"internalType": "uint64",
"name": "deadline",
"type": "uint64"
}
],
"internalType": "struct MultiDelegatedAttestationRequest[]",
"name": "multiDelegatedRequests",
"type": "tuple[]"
}
],
"name": "multiAttestByDelegation",
"outputs": [
{
"internalType": "bytes32[]",
"name": "",
"type": "bytes32[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct RevocationRequestData[]",
"name": "data",
"type": "tuple[]"
}
],
"internalType": "struct MultiRevocationRequest[]",
"name": "multiRequests",
"type": "tuple[]"
}
],
"name": "multiRevoke",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct RevocationRequestData[]",
"name": "data",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"internalType": "struct Signature[]",
"name": "signatures",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "revoker",
"type": "address"
},
{
"internalType": "uint64",
"name": "deadline",
"type": "uint64"
}
],
"internalType": "struct MultiDelegatedRevocationRequest[]",
"name": "multiDelegatedRequests",
"type": "tuple[]"
}
],
"name": "multiRevokeByDelegation",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "data",
"type": "bytes32[]"
}
],
"name": "multiRevokeOffchain",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "data",
"type": "bytes32[]"
}
],
"name": "multiTimestamp",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct RevocationRequestData",
"name": "data",
"type": "tuple"
}
],
"internalType": "struct RevocationRequest",
"name": "request",
"type": "tuple"
}
],
"name": "revoke",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "schema",
"type": "bytes32"
},
{
"components": [
{
"internalType": "bytes32",
"name": "uid",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct RevocationRequestData",
"name": "data",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"internalType": "struct Signature",
"name": "signature",
"type": "tuple"
},
{
"internalType": "address",
"name": "revoker",
"type": "address"
},
{
"internalType": "uint64",
"name": "deadline",
"type": "uint64"
}
],
"internalType": "struct DelegatedRevocationRequest",
"name": "delegatedRequest",
"type": "tuple"
}
],
"name": "revokeByDelegation",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
}
],
"name": "revokeOffchain",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "data",
"type": "bytes32"
}
],
"name": "timestamp",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x6101e0806040523461033b57602081614bd580380380916100208285610340565b83398101031261033b57516001600160a01b0381169081810361033b576040519161004c604084610340565b60038352602083016245415360e81b81526040519061006c604083610340565b600582526020820190640312e332e360dc1b82526001608052600360a052600060c05261009886610363565b610180526100a58361050f565b6101a05285519020918261014052519020806101605246610100526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261011160c082610340565b51902060e052306101205282516001600160401b03811161032557600254600181811c9116801561031b575b602082101461030557601f81116102a0575b506020601f8211600114610239578192939460009261022e575b50508160011b916000199060031b1c1916176002555b1561021d576101c05260405161452790816106ae823960805181610900015260a0518161092e015260c05181610959015260e05181613840015261010051816138fd015261012051816138110152610140518161388f015261016051816138b50152610180518161077a01526101a051816107a601526101c0518181816101e901528181611f2301528181612254015281816126b00152612e300152f35b6311a1e69760e01b60005260046000fd5b015190503880610169565b601f198216906002600052806000209160005b8181106102885750958360019596971061026f575b505050811b0160025561017f565b015160001960f88460031b161c19169055388080610261565b9192602060018192868b01518155019401920161024c565b60026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f830160051c810191602084106102fb575b601f0160051c01905b8181106102ef575061014f565b600081556001016102e2565b90915081906102d9565b634e487b7160e01b600052602260045260246000fd5b90607f169061013d565b634e487b7160e01b600052604160045260246000fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761032557604052565b908151602081106000146103fb575090601f81511161039f57602081519101516020821061038f571790565b6000198260200360031b1b161790565b6040519063305a27a960e01b8252602060048301528181519182602483015260005b8381106103e35750508160006044809484010152601f80199101168101030190fd5b602082820181015160448784010152859350016103c1565b6001600160401b03811161032557600054600181811c91168015610505575b602082101461030557601f81116104d0575b50602092601f821160011461046c5792819293600092610461575b50508160011b916000199060031b1c19161760005560ff90565b015190503880610447565b601f1982169360008052806000209160005b8681106104b8575083600195961061049f575b505050811b0160005560ff90565b015160001960f88460031b161c19169055388080610491565b9192602060018192868501518155019401920161047e565b60008052601f6020600020910160051c810190601f830160051c015b8181106104f9575061042c565b600081556001016104ec565b90607f169061041a565b90815160208110600014610597575090601f81511161053b57602081519101516020821061038f571790565b6040519063305a27a960e01b8252602060048301528181519182602483015260005b83811061057f5750508160006044809484010152601f80199101168101030190fd5b6020828201810151604487840101528593500161055d565b6001600160401b03811161032557600154600181811c911680156106a3575b602082101461030557601f811161066d575b50602092601f821160011461060857928192936000926105fd575b50508160011b916000199060031b1c19161760015560ff90565b0151905038806105e3565b601f198216936001600052806000209160005b868110610655575083600195961061063c575b505050811b0160015560ff90565b015160001960f88460031b161c1916905538808061062e565b9192602060018192868501518155019401920161061b565b6001600052601f6020600020910160051c810190601f830160051c015b81811061069757506105c8565b6000815560010161068a565b90607f16906105b656fe6080604052600436101561001257600080fd5b60003560e01c80630eabf66014610f1a57806312b11a1714610edf57806313893f6114610e6d57806317d7de7c14610d825780632d0335ab14610d3b5780633c04271514610c4957806344adc90e14610b6e5780634692626714610b2e5780634cb7e9e514610a5b5780634d00307014610a3157806354fd4d50146108e757806379f7573a1461085057806384b0196e146107625780639541152514610520578063a3112a64146104d3578063a6d4dbc7146103d2578063b469318d14610373578063b83010d314610338578063cf190f341461030d578063d45c4435146102d7578063e30bb563146102a1578063e71ff36514610230578063ed24911d1461020d578063f10b5cc8146101bc5763f17325e71461012f57600080fd5b60206003193601126101b75760043567ffffffffffffffff81116101b75780600401604060031983360301126101b75760206101a781936101ae936101896101756117d4565b9261018460243692018461183f565b611716565b61019283611598565b5261019c82611598565b503491339135612641565b0151611598565b51604051908152f35b600080fd5b346101b75760006003193601126101b757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b75760006003193601126101b75760206102286137fa565b604051908152f35b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b75761026190369060040161113b565b9067ffffffffffffffff42169160005b81811061028357602084604051908152f35b8061029b8561029560019486886115f5565b356135bf565b01610271565b346101b75760206003193601126101b75760206102cd6004356000526004602052604060002054151590565b6040519015158152f35b346101b75760206003193601126101b7576004356000526005602052602067ffffffffffffffff60406000205416604051908152f35b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004353361241b565b346101b75760006003193601126101b75760206040517fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e758152f35b346101b75760406003193601126101b75773ffffffffffffffffffffffffffffffffffffffff6103a16111b4565b1660005260066020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b6101006003193601126101b7576040516103eb81611396565b6004358082526103fa3661148d565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126101b757604051610435816113fd565b60643560ff811681036101b7578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff811681036101b75780606084015260e43567ffffffffffffffff811681036101b757836104a59160806104d1960152611bd5565b6104ad6119dc565b6104b63661148d565b6104bf82611598565b526104c981611598565b503492611ed7565b005b346101b75760206003193601126101b7576104ec611ab0565b50600435600052600460205261051c6105086040600020611b03565b604051918291602083526020830190611266565b0390f35b60206003193601126101b75760043567ffffffffffffffff81116101b75761054c90369060040161113b565b61055581611893565b9060009234916000916000198201925b8281106105855761051c6105798888613554565b604051918291826111f8565b919395909294610596838686611327565b966105a4602089018961191c565b90958115801561074a575b6107205760808a0135979060005b838110156106b25760008c6105e56105da8460051b8d018d61183f565b916040810190611a5c565b849291921015610685576105fb8f606001611872565b928d67ffffffffffffffff811603610682575073ffffffffffffffffffffffffffffffffffffffff8f919361065c61067c9461064b600198976040519661064188611396565b3587523690611716565b602086015236906060880201611545565b604084015216606082015267ffffffffffffffff8d1660808201526124f0565b016105bd565b80fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b50959989985083976106f69296946020946106ed936106e68f9e60019a9f14946106de60608401611872565b933691611970565b9035612dbe565b968751906115b9565b950180516107048a8a6115a5565b5261070f89896115a5565b505151019601939293919091610565565b7f947d5a840000000000000000000000000000000000000000000000000000000060005260046000fd5b5061075860408b018b611a5c565b90508214156105af565b346101b75760006003193601126101b75760e061079e7f0000000000000000000000000000000000000000000000000000000000000000614041565b61051c6107ca7f00000000000000000000000000000000000000000000000000000000000000006140bf565b9161082f602093610821604051936107e28786611452565b6000855260003681376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895288015260e087019061118f565b90858203604087015261118f565b90466060850152306080850152600060a085015283820360c0850152611232565b346101b75760206003193601126101b75760043533600052600360205260406000205490818111156108bd577f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb79160409133600052600360205280836000205582519182526020820152a1005b7f756688fe0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b75760006003193601126101b75761051c6109247f0000000000000000000000000000000000000000000000000000000000000000613672565b610a1d60016109527f0000000000000000000000000000000000000000000000000000000000000000613672565b928161097d7f0000000000000000000000000000000000000000000000000000000000000000613672565b60206040519684610997899651809285808a01910161116c565b85017f2e00000000000000000000000000000000000000000000000000000000000000838201526109d1825180938560218501910161116c565b01017f2e0000000000000000000000000000000000000000000000000000000000000083820152610a0c82518093602060028501910161116c565b01010301601f198101835282611452565b60405191829160208352602083019061118f565b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004356135bf565b60206003193601126101b75760043567ffffffffffffffff81116101b757610a8790369060040161113b565b60001981019190600090345b818310610a9c57005b610aa78383866118dc565b60208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101b75781019182359267ffffffffffffffff84116101b757602001928060061b360384136101b75760019382610b2092610b2695610b198c8b1494339336916114d3565b9035612207565b906115b9565b920191610a93565b60606003193601126101b7576104d1610b456119dc565b610b4e3661148d565b610b5782611598565b52610b6181611598565b5034903390600435611ed7565b60206003193601126101b75760043567ffffffffffffffff81116101b757610b9a90369060040161113b565b90610ba482611893565b9160009134906000926000198101905b808510610bc85761051c6105798789613554565b9091929394610bd88683866118dc565b906020820191610be8838261191c565b90501561072057610c21610c18898988856106e6610c0a60019a60209961191c565b939095149433933691611970565b978851906115b9565b96018051610c2f898b6115a5565b52610c3a888a6115a5565b50515101950193929190610bb4565b60206003193601126101b75760043567ffffffffffffffff81116101b757806004019060e060031982360301126101b757604051610c8681611396565b823592838252602483019384359467ffffffffffffffff86116101b757610d336101ae95610d1a6101a795610d0760209a98610cc98c9a60043691880101611716565b8a820152610cda3660448701611545565b6040820152610cfd60c460a4870196610cf2886111d7565b606085015201611583565b60808201526124f0565b610184610d126117d4565b95369261183f565b610d2384611598565b52610d2d83611598565b50611872565b903492612641565b346101b75760206003193601126101b75773ffffffffffffffffffffffffffffffffffffffff610d696111b4565b1660005260036020526020604060002054604051908152f35b346101b75760006003193601126101b7576040516000600254610da481611605565b8084529060018116908115610e2b5750600114610dcc575b61051c83610a1d81850382611452565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b808210610e1157509091508101602001610a1d610dbc565b919260018160209254838588010152019101909291610df9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610a1d9050610dbc565b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b757610e9e90369060040161113b565b9067ffffffffffffffff42169160005b818110610ec057602084604051908152f35b80610ed985610ed260019486886115f5565b353361241b565b01610eae565b346101b75760006003193601126101b75760206040517ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768152f35b60206003193601126101b75760043567ffffffffffffffff81116101b757610f4690369060040161113b565b600019810191600091345b818410610f5a57005b610f65848385611327565b60a0813603126101b757604051610f7b81611396565b81358152602082013567ffffffffffffffff81116101b757820136601f820112156101b757610fb19036906020813591016114d3565b9060208101918252604083013567ffffffffffffffff81116101b757830136601f820112156101b757803590610fe682611475565b91610ff46040519384611452565b808352602060608185019202830101913683116101b757602001905b82821061112157505050604082018181526110406080611032606088016111d7565b966060860197885201611583565b936080840194855251938451928315908115611115575b506107205760005b8381106110a2575050505061109a928460019593610b2093519073ffffffffffffffffffffffffffffffffffffffff8c8c1494511691612207565b930192610f51565b60019061110f86516110b4838a6115a5565b516110c08488516115a5565b5173ffffffffffffffffffffffffffffffffffffffff8c51169067ffffffffffffffff88511692604051946110f486611396565b85526020850152604084015260608301526080820152611bd5565b0161105f565b9050518314158c611057565b60206060916111303685611545565b815201910190611010565b9181601f840112156101b75782359167ffffffffffffffff83116101b7576020808501948460051b0101116101b757565b60005b83811061117f5750506000910152565b818101518382015260200161116f565b90601f19601f6020936111ad8151809281875287808801910161116c565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b602060408183019282815284518094520192019060005b81811061121c5750505090565b825184526020938401939092019160010161120f565b906020808351928381520192019060005b8181106112505750505090565b8251845260209384019390920191600101611243565b9061014061012061132493805184526020810151602085015267ffffffffffffffff604082015116604085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015260a081015160a085015273ffffffffffffffffffffffffffffffffffffffff60c08201511660c085015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e0850152610100810151151561010085015201519181610120820152019061118f565b90565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156101b7570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60a0810190811067ffffffffffffffff8211176113b257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176113b257604052565b6060810190811067ffffffffffffffff8211176113b257604052565b60c0810190811067ffffffffffffffff8211176113b257604052565b610140810190811067ffffffffffffffff8211176113b257604052565b90601f601f19910116810190811067ffffffffffffffff8211176113b257604052565b67ffffffffffffffff81116113b25760051b60200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60409101126101b757604051906114c4826113e1565b60243582526044356020830152565b9291926114df82611475565b936114ed6040519586611452565b602085848152019260061b8201918183116101b757925b8284106115115750505050565b600060408584031261068257506020604091825161152e816113e1565b863581528287013583820152815201930192611504565b91908260609103126101b75760405161155d816113fd565b8092803560ff811681036101b75760409182918452602081013560208501520135910152565b359067ffffffffffffffff821682036101b757565b8051156113675760200190565b80518210156113675760209160051b010190565b919082039182116115c657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156113675760051b0190565b90600182811c9216801561164e575b602083101461161f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611614565b6000929181549161166883611605565b80835292600181169081156116be575060011461168457505050565b60009081526020812093945091925b8383106116a4575060209250010190565b600181602092949394548385870101520191019190611693565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b67ffffffffffffffff81116113b257601f01601f191660200190565b919060c0838203126101b7576040519061172f82611419565b819361173a816111d7565b835261174860208201611583565b6020840152604081013580151581036101b757604084015260608101356060840152608081013567ffffffffffffffff81116101b75781019082601f830112156101b757813592611798846116fa565b906117a66040519283611452565b848252602085850101116101b757600060208560a09682889701838601378301015260808501520135910152565b604080519091906117e58382611452565b6001815291601f19018260005b8281106117fe57505050565b60209060405161180d81611419565b60008152600083820152600060408201526000606082015260606080820152600060a0820152828285010152016117f2565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156101b7570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101b75790565b9061189d82611475565b6118aa6040519182611452565b828152601f196118ba8294611475565b019060005b8281106118cb57505050565b8060606020809385010152016118bf565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101b7570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b757602001918160051b360383136101b757565b92919061197c81611475565b9361198a6040519586611452565b602085838152019160051b8101918383116101b75781905b8382106119b0575050505050565b813567ffffffffffffffff81116101b7576020916119d18784938701611716565b8152019101906119a2565b604080519091906119ed8382611452565b6001815291601f19018260005b828110611a0657505050565b602090604051611a15816113e1565b60008152600083820152828285010152016119fa565b90611a3582611475565b611a426040519182611452565b828152601f19611a528294611475565b0190602036910137565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b7576020019160608202360383136101b757565b60405190611abd82611435565b60606101208360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201520152565b906006610120604051611b1581611435565b611bc28195805483526001810154602084015267ffffffffffffffff60028201548181166040860152818160401c16606086015260801c166080840152600381015460a084015273ffffffffffffffffffffffffffffffffffffffff60048201541660c084015260ff600582015473ffffffffffffffffffffffffffffffffffffffff811660e086015260a01c161515610100840152611bbb6040518096819301611658565b0384611452565b0152565b60001981146115c65760010190565b6080810167ffffffffffffffff8151168015159081611d85575b50611d5b578173ffffffffffffffffffffffffffffffffffffffff611cba6020611d2a950151926040810151946060820194848651169251916020825192015184600052600360205267ffffffffffffffff604060002092835493611c5385611bc6565b90555116926040519460208601967fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75885260408701526060860152608085015260a084015260c083015260e082015260e08152611cb261010082611452565b519020613923565b915116611d256020840151611d1760ff60408701519651166040519687936020850191926041937fff00000000000000000000000000000000000000000000000000000000000000928452602084015260f81b1660408201520190565b03601f198101855284611452565b613964565b15611d3157565b7f8baa579f0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1ab7da6b0000000000000000000000000000000000000000000000000000000060005260046000fd5b905067ffffffffffffffff42161138611bef565b519081151582036101b757565b6020818303126101b75780519067ffffffffffffffff82116101b75701906080828203126101b757604051916080830183811067ffffffffffffffff8211176113b25760405280518352602081015173ffffffffffffffffffffffffffffffffffffffff811681036101b7576020840152611e2360408201611d99565b604084015260608101519067ffffffffffffffff82116101b7570181601f820112156101b7578051611e54816116fa565b92611e626040519485611452565b818452602082840101116101b757611e80916020808501910161116c565b606082015290565b90611e9282611475565b611e9f6040519182611452565b828152601f19611eaf8294611475565b019060005b828110611ec057505050565b602090611ecb611ab0565b82828501015201611eb4565b9190604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825283600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156121fb576000926121d6575b508151156121825792835190611f6982611e88565b93611f7383611a2b565b954267ffffffffffffffff169060005b858110611f9e57505050505050916113249391600193613b26565b611fa881836115a5565b5190815160005260046020526040600020918254156121ac578660018401540361218257600583015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600284019167ffffffffffffffff835460801c16612104577ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff8f8f886120f1918f99936120c78f9d6120c260019f60c098907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b611b03565b6120d184846115a5565b526120dc83836115a5565b506120eb83888b0151926115a5565b526115a5565b510151169251604051908152a401611f83565b7f905e71070000000000000000000000000000000000000000000000000000000060005260046000fd5b7f157bd4c30000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4ca888670000000000000000000000000000000000000000000000000000000060005260046000fd5b7fbf37b20e0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc5723b510000000000000000000000000000000000000000000000000000000060005260046000fd5b6121f49192503d806000833e6121ec8183611452565b810190611da6565b9038611f54565b6040513d6000823e3d90fd5b949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815286600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156121fb57600091612400575b5080511561218257825161229881611e88565b926122a282611a2b565b944267ffffffffffffffff169060005b8481106122c9575050505050611324959650613b26565b6122d381836115a5565b51908151600052600460205260406000208054156121ac578d60018201540361218257600581015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600282019367ffffffffffffffff855460801c16612104578f92602073ffffffffffffffffffffffffffffffffffffffff60c08f8f89906123ed926120c78f986120c260019f9a7ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6159b907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77fffffffff