// 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": "0x6101e0806040523461033b57602081614bd580380380916100208285610340565b83398101031261033b57516001600160a01b0381169081810361033b576040519161004c604084610340565b60038352602083016245415360e81b81526040519061006c604083610340565b600582526020820190640312e332e360dc1b82526001608052600360a052600060c05261009886610363565b610180526100a58361050f565b6101a05285519020918261014052519020806101605246610100526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261011160c082610340565b51902060e052306101205282516001600160401b03811161032557600254600181811c9116801561031b575b602082101461030557601f81116102a0575b506020601f8211600114610239578192939460009261022e575b50508160011b916000199060031b1c1916176002555b1561021d576101c05260405161452790816106ae823960805181610900015260a0518161092e015260c05181610959015260e05181613840015261010051816138fd015261012051816138110152610140518161388f015261016051816138b50152610180518161077a01526101a051816107a601526101c0518181816101e901528181611f2301528181612254015281816126b00152612e300152f35b6311a1e69760e01b60005260046000fd5b015190503880610169565b601f198216906002600052806000209160005b8181106102885750958360019596971061026f575b505050811b0160025561017f565b015160001960f88460031b161c19169055388080610261565b9192602060018192868b01518155019401920161024c565b60026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f830160051c810191602084106102fb575b601f0160051c01905b8181106102ef575061014f565b600081556001016102e2565b90915081906102d9565b634e487b7160e01b600052602260045260246000fd5b90607f169061013d565b634e487b7160e01b600052604160045260246000fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761032557604052565b908151602081106000146103fb575090601f81511161039f57602081519101516020821061038f571790565b6000198260200360031b1b161790565b6040519063305a27a960e01b8252602060048301528181519182602483015260005b8381106103e35750508160006044809484010152601f80199101168101030190fd5b602082820181015160448784010152859350016103c1565b6001600160401b03811161032557600054600181811c91168015610505575b602082101461030557601f81116104d0575b50602092601f821160011461046c5792819293600092610461575b50508160011b916000199060031b1c19161760005560ff90565b015190503880610447565b601f1982169360008052806000209160005b8681106104b8575083600195961061049f575b505050811b0160005560ff90565b015160001960f88460031b161c19169055388080610491565b9192602060018192868501518155019401920161047e565b60008052601f6020600020910160051c810190601f830160051c015b8181106104f9575061042c565b600081556001016104ec565b90607f169061041a565b90815160208110600014610597575090601f81511161053b57602081519101516020821061038f571790565b6040519063305a27a960e01b8252602060048301528181519182602483015260005b83811061057f5750508160006044809484010152601f80199101168101030190fd5b6020828201810151604487840101528593500161055d565b6001600160401b03811161032557600154600181811c911680156106a3575b602082101461030557601f811161066d575b50602092601f821160011461060857928192936000926105fd575b50508160011b916000199060031b1c19161760015560ff90565b0151905038806105e3565b601f198216936001600052806000209160005b868110610655575083600195961061063c575b505050811b0160015560ff90565b015160001960f88460031b161c1916905538808061062e565b9192602060018192868501518155019401920161061b565b6001600052601f6020600020910160051c810190601f830160051c015b81811061069757506105c8565b6000815560010161068a565b90607f16906105b656fe6080604052600436101561001257600080fd5b60003560e01c80630eabf66014610f1a57806312b11a1714610edf57806313893f6114610e6d57806317d7de7c14610d825780632d0335ab14610d3b5780633c04271514610c4957806344adc90e14610b6e5780634692626714610b2e5780634cb7e9e514610a5b5780634d00307014610a3157806354fd4d50146108e757806379f7573a1461085057806384b0196e146107625780639541152514610520578063a3112a64146104d3578063a6d4dbc7146103d2578063b469318d14610373578063b83010d314610338578063cf190f341461030d578063d45c4435146102d7578063e30bb563146102a1578063e71ff36514610230578063ed24911d1461020d578063f10b5cc8146101bc5763f17325e71461012f57600080fd5b60206003193601126101b75760043567ffffffffffffffff81116101b75780600401604060031983360301126101b75760206101a781936101ae936101896101756117d4565b9261018460243692018461183f565b611716565b61019283611598565b5261019c82611598565b503491339135612641565b0151611598565b51604051908152f35b600080fd5b346101b75760006003193601126101b757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b75760006003193601126101b75760206102286137fa565b604051908152f35b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b75761026190369060040161113b565b9067ffffffffffffffff42169160005b81811061028357602084604051908152f35b8061029b8561029560019486886115f5565b356135bf565b01610271565b346101b75760206003193601126101b75760206102cd6004356000526004602052604060002054151590565b6040519015158152f35b346101b75760206003193601126101b7576004356000526005602052602067ffffffffffffffff60406000205416604051908152f35b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004353361241b565b346101b75760006003193601126101b75760206040517fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e758152f35b346101b75760406003193601126101b75773ffffffffffffffffffffffffffffffffffffffff6103a16111b4565b1660005260066020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b6101006003193601126101b7576040516103eb81611396565b6004358082526103fa3661148d565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126101b757604051610435816113fd565b60643560ff811681036101b7578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff811681036101b75780606084015260e43567ffffffffffffffff811681036101b757836104a59160806104d1960152611bd5565b6104ad6119dc565b6104b63661148d565b6104bf82611598565b526104c981611598565b503492611ed7565b005b346101b75760206003193601126101b7576104ec611ab0565b50600435600052600460205261051c6105086040600020611b03565b604051918291602083526020830190611266565b0390f35b60206003193601126101b75760043567ffffffffffffffff81116101b75761054c90369060040161113b565b61055581611893565b9060009234916000916000198201925b8281106105855761051c6105798888613554565b604051918291826111f8565b919395909294610596838686611327565b966105a4602089018961191c565b90958115801561074a575b6107205760808a0135979060005b838110156106b25760008c6105e56105da8460051b8d018d61183f565b916040810190611a5c565b849291921015610685576105fb8f606001611872565b928d67ffffffffffffffff811603610682575073ffffffffffffffffffffffffffffffffffffffff8f919361065c61067c9461064b600198976040519661064188611396565b3587523690611716565b602086015236906060880201611545565b604084015216606082015267ffffffffffffffff8d1660808201526124f0565b016105bd565b80fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b50959989985083976106f69296946020946106ed936106e68f9e60019a9f14946106de60608401611872565b933691611970565b9035612dbe565b968751906115b9565b950180516107048a8a6115a5565b5261070f89896115a5565b505151019601939293919091610565565b7f947d5a840000000000000000000000000000000000000000000000000000000060005260046000fd5b5061075860408b018b611a5c565b90508214156105af565b346101b75760006003193601126101b75760e061079e7f0000000000000000000000000000000000000000000000000000000000000000614041565b61051c6107ca7f00000000000000000000000000000000000000000000000000000000000000006140bf565b9161082f602093610821604051936107e28786611452565b6000855260003681376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895288015260e087019061118f565b90858203604087015261118f565b90466060850152306080850152600060a085015283820360c0850152611232565b346101b75760206003193601126101b75760043533600052600360205260406000205490818111156108bd577f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb79160409133600052600360205280836000205582519182526020820152a1005b7f756688fe0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b75760006003193601126101b75761051c6109247f0000000000000000000000000000000000000000000000000000000000000000613672565b610a1d60016109527f0000000000000000000000000000000000000000000000000000000000000000613672565b928161097d7f0000000000000000000000000000000000000000000000000000000000000000613672565b60206040519684610997899651809285808a01910161116c565b85017f2e00000000000000000000000000000000000000000000000000000000000000838201526109d1825180938560218501910161116c565b01017f2e0000000000000000000000000000000000000000000000000000000000000083820152610a0c82518093602060028501910161116c565b01010301601f198101835282611452565b60405191829160208352602083019061118f565b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004356135bf565b60206003193601126101b75760043567ffffffffffffffff81116101b757610a8790369060040161113b565b60001981019190600090345b818310610a9c57005b610aa78383866118dc565b60208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101b75781019182359267ffffffffffffffff84116101b757602001928060061b360384136101b75760019382610b2092610b2695610b198c8b1494339336916114d3565b9035612207565b906115b9565b920191610a93565b60606003193601126101b7576104d1610b456119dc565b610b4e3661148d565b610b5782611598565b52610b6181611598565b5034903390600435611ed7565b60206003193601126101b75760043567ffffffffffffffff81116101b757610b9a90369060040161113b565b90610ba482611893565b9160009134906000926000198101905b808510610bc85761051c6105798789613554565b9091929394610bd88683866118dc565b906020820191610be8838261191c565b90501561072057610c21610c18898988856106e6610c0a60019a60209961191c565b939095149433933691611970565b978851906115b9565b96018051610c2f898b6115a5565b52610c3a888a6115a5565b50515101950193929190610bb4565b60206003193601126101b75760043567ffffffffffffffff81116101b757806004019060e060031982360301126101b757604051610c8681611396565b823592838252602483019384359467ffffffffffffffff86116101b757610d336101ae95610d1a6101a795610d0760209a98610cc98c9a60043691880101611716565b8a820152610cda3660448701611545565b6040820152610cfd60c460a4870196610cf2886111d7565b606085015201611583565b60808201526124f0565b610184610d126117d4565b95369261183f565b610d2384611598565b52610d2d83611598565b50611872565b903492612641565b346101b75760206003193601126101b75773ffffffffffffffffffffffffffffffffffffffff610d696111b4565b1660005260036020526020604060002054604051908152f35b346101b75760006003193601126101b7576040516000600254610da481611605565b8084529060018116908115610e2b5750600114610dcc575b61051c83610a1d81850382611452565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b808210610e1157509091508101602001610a1d610dbc565b919260018160209254838588010152019101909291610df9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610a1d9050610dbc565b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b757610e9e90369060040161113b565b9067ffffffffffffffff42169160005b818110610ec057602084604051908152f35b80610ed985610ed260019486886115f5565b353361241b565b01610eae565b346101b75760006003193601126101b75760206040517ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768152f35b60206003193601126101b75760043567ffffffffffffffff81116101b757610f4690369060040161113b565b600019810191600091345b818410610f5a57005b610f65848385611327565b60a0813603126101b757604051610f7b81611396565b81358152602082013567ffffffffffffffff81116101b757820136601f820112156101b757610fb19036906020813591016114d3565b9060208101918252604083013567ffffffffffffffff81116101b757830136601f820112156101b757803590610fe682611475565b91610ff46040519384611452565b808352602060608185019202830101913683116101b757602001905b82821061112157505050604082018181526110406080611032606088016111d7565b966060860197885201611583565b936080840194855251938451928315908115611115575b506107205760005b8381106110a2575050505061109a928460019593610b2093519073ffffffffffffffffffffffffffffffffffffffff8c8c1494511691612207565b930192610f51565b60019061110f86516110b4838a6115a5565b516110c08488516115a5565b5173ffffffffffffffffffffffffffffffffffffffff8c51169067ffffffffffffffff88511692604051946110f486611396565b85526020850152604084015260608301526080820152611bd5565b0161105f565b9050518314158c611057565b60206060916111303685611545565b815201910190611010565b9181601f840112156101b75782359167ffffffffffffffff83116101b7576020808501948460051b0101116101b757565b60005b83811061117f5750506000910152565b818101518382015260200161116f565b90601f19601f6020936111ad8151809281875287808801910161116c565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b602060408183019282815284518094520192019060005b81811061121c5750505090565b825184526020938401939092019160010161120f565b906020808351928381520192019060005b8181106112505750505090565b8251845260209384019390920191600101611243565b9061014061012061132493805184526020810151602085015267ffffffffffffffff604082015116604085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015260a081015160a085015273ffffffffffffffffffffffffffffffffffffffff60c08201511660c085015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e0850152610100810151151561010085015201519181610120820152019061118f565b90565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156101b7570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60a0810190811067ffffffffffffffff8211176113b257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176113b257604052565b6060810190811067ffffffffffffffff8211176113b257604052565b60c0810190811067ffffffffffffffff8211176113b257604052565b610140810190811067ffffffffffffffff8211176113b257604052565b90601f601f19910116810190811067ffffffffffffffff8211176113b257604052565b67ffffffffffffffff81116113b25760051b60200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60409101126101b757604051906114c4826113e1565b60243582526044356020830152565b9291926114df82611475565b936114ed6040519586611452565b602085848152019260061b8201918183116101b757925b8284106115115750505050565b600060408584031261068257506020604091825161152e816113e1565b863581528287013583820152815201930192611504565b91908260609103126101b75760405161155d816113fd565b8092803560ff811681036101b75760409182918452602081013560208501520135910152565b359067ffffffffffffffff821682036101b757565b8051156113675760200190565b80518210156113675760209160051b010190565b919082039182116115c657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156113675760051b0190565b90600182811c9216801561164e575b602083101461161f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611614565b6000929181549161166883611605565b80835292600181169081156116be575060011461168457505050565b60009081526020812093945091925b8383106116a4575060209250010190565b600181602092949394548385870101520191019190611693565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b67ffffffffffffffff81116113b257601f01601f191660200190565b919060c0838203126101b7576040519061172f82611419565b819361173a816111d7565b835261174860208201611583565b6020840152604081013580151581036101b757604084015260608101356060840152608081013567ffffffffffffffff81116101b75781019082601f830112156101b757813592611798846116fa565b906117a66040519283611452565b848252602085850101116101b757600060208560a09682889701838601378301015260808501520135910152565b604080519091906117e58382611452565b6001815291601f19018260005b8281106117fe57505050565b60209060405161180d81611419565b60008152600083820152600060408201526000606082015260606080820152600060a0820152828285010152016117f2565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156101b7570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101b75790565b9061189d82611475565b6118aa6040519182611452565b828152601f196118ba8294611475565b019060005b8281106118cb57505050565b8060606020809385010152016118bf565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101b7570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b757602001918160051b360383136101b757565b92919061197c81611475565b9361198a6040519586611452565b602085838152019160051b8101918383116101b75781905b8382106119b0575050505050565b813567ffffffffffffffff81116101b7576020916119d18784938701611716565b8152019101906119a2565b604080519091906119ed8382611452565b6001815291601f19018260005b828110611a0657505050565b602090604051611a15816113e1565b60008152600083820152828285010152016119fa565b90611a3582611475565b611a426040519182611452565b828152601f19611a528294611475565b0190602036910137565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b7576020019160608202360383136101b757565b60405190611abd82611435565b60606101208360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201520152565b906006610120604051611b1581611435565b611bc28195805483526001810154602084015267ffffffffffffffff60028201548181166040860152818160401c16606086015260801c166080840152600381015460a084015273ffffffffffffffffffffffffffffffffffffffff60048201541660c084015260ff600582015473ffffffffffffffffffffffffffffffffffffffff811660e086015260a01c161515610100840152611bbb6040518096819301611658565b0384611452565b0152565b60001981146115c65760010190565b6080810167ffffffffffffffff8151168015159081611d85575b50611d5b578173ffffffffffffffffffffffffffffffffffffffff611cba6020611d2a950151926040810151946060820194848651169251916020825192015184600052600360205267ffffffffffffffff604060002092835493611c5385611bc6565b90555116926040519460208601967fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75885260408701526060860152608085015260a084015260c083015260e082015260e08152611cb261010082611452565b519020613923565b915116611d256020840151611d1760ff60408701519651166040519687936020850191926041937fff00000000000000000000000000000000000000000000000000000000000000928452602084015260f81b1660408201520190565b03601f198101855284611452565b613964565b15611d3157565b7f8baa579f0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1ab7da6b0000000000000000000000000000000000000000000000000000000060005260046000fd5b905067ffffffffffffffff42161138611bef565b519081151582036101b757565b6020818303126101b75780519067ffffffffffffffff82116101b75701906080828203126101b757604051916080830183811067ffffffffffffffff8211176113b25760405280518352602081015173ffffffffffffffffffffffffffffffffffffffff811681036101b7576020840152611e2360408201611d99565b604084015260608101519067ffffffffffffffff82116101b7570181601f820112156101b7578051611e54816116fa565b92611e626040519485611452565b818452602082840101116101b757611e80916020808501910161116c565b606082015290565b90611e9282611475565b611e9f6040519182611452565b828152601f19611eaf8294611475565b019060005b828110611ec057505050565b602090611ecb611ab0565b82828501015201611eb4565b9190604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825283600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156121fb576000926121d6575b508151156121825792835190611f6982611e88565b93611f7383611a2b565b954267ffffffffffffffff169060005b858110611f9e57505050505050916113249391600193613b26565b611fa881836115a5565b5190815160005260046020526040600020918254156121ac578660018401540361218257600583015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600284019167ffffffffffffffff835460801c16612104577ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff8f8f886120f1918f99936120c78f9d6120c260019f60c098907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b611b03565b6120d184846115a5565b526120dc83836115a5565b506120eb83888b0151926115a5565b526115a5565b510151169251604051908152a401611f83565b7f905e71070000000000000000000000000000000000000000000000000000000060005260046000fd5b7f157bd4c30000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4ca888670000000000000000000000000000000000000000000000000000000060005260046000fd5b7fbf37b20e0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc5723b510000000000000000000000000000000000000000000000000000000060005260046000fd5b6121f49192503d806000833e6121ec8183611452565b810190611da6565b9038611f54565b6040513d6000823e3d90fd5b949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815286600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156121fb57600091612400575b5080511561218257825161229881611e88565b926122a282611a2b565b944267ffffffffffffffff169060005b8481106122c9575050505050611324959650613b26565b6122d381836115a5565b51908151600052600460205260406000208054156121ac578d60018201540361218257600581015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600282019367ffffffffffffffff855460801c16612104578f92602073ffffffffffffffffffffffffffffffffffffffff60c08f8f89906123ed926120c78f986120c260019f9a7ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6159b907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b510151169251604051908152a4016122b2565b61241591503d806000833e6121ec8183611452565b38612285565b73ffffffffffffffffffffffffffffffffffffffff1691826000526006602052604060002090826000528160205267ffffffffffffffff604060002054166124c65767ffffffffffffffff918360005260205260406000208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a2229600080a4565b7fec9d6eeb0000000000000000000000000000000000000000000000000000000060005260046000fd5b6080810167ffffffffffffffff8151168015159081612613575b50611d5b578173ffffffffffffffffffffffffffffffffffffffff611cba6020611d2a95015192604081015194606082019484865116925191858251169167ffffffffffffffff602082015116906040810151151560608201519060a06080840151602081519101209301519388600052600360205267ffffffffffffffff60406000209687549761259b89611bc6565b90555116966040519860208a019a7ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152611cb261018082611452565b905067ffffffffffffffff4216113861250a565b60405190612634826113e1565b6060602083600081520152565b929161264b612627565b50815193612657612627565b9461266181611a2b565b6020870152604051917fa2ea7c6e00000000000000000000000000000000000000000000000000000000835280600484015260008360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9283156121fb57600093612da1575b50825115612182576126f582949592611e88565b936126ff81611a2b565b956000935b8285106127235750505050509161271e9391600193613db5565b815290565b919599909498939761273889849995996115a5565b519960208b019767ffffffffffffffff8951168015159081612d8c575b50612d625760408201511580612d55575b61212e5789988c6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519d8e6127b381611435565b60008152602001528d4267ffffffffffffffff1660408201526060015260808d016000905260a08d015260c08c015273ffffffffffffffffffffffffffffffffffffffff8a1660e08c01526101008b01526101208a015260005b60208a015160c08b015160e08c01519060408d01518d606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b60788401526079830152805190816099840191602001916129159261116c565b81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4810182526004016129789082611452565b5190208060005260046020526040600020541561299e575060010163ffffffff1661280d565b91979d99939b929895949c905099959981845281600052600460205260406000208451815560208501516001820155612aa66002820167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085810151600383015560c08601516004830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560e08701516005840180546101008a01517fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791151590921b74ff00000000000000000000000000000000000000001617905561012085015180519067ffffffffffffffff82116113b257612b7b6006840154611605565b601f8111612d0e575b50909e9f9e8994939291602090601f8311600114612c9c576006929160009183612c91575b50506000198260011b9260031b1c1916179101555b8d8c8c606084015180612c64575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612bfe848660019e6120eb83612c169a6115a5565b50612c0e8460a0890151926115a5565b5201516115a5565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff891693a401939190612704565b92505050612c819193506000526004602052604060002054151590565b156121ac5786918d8c8c38612bcc565b015190503880612ba9565b9060068401600052806000209160005b601f1985168110612cf3575091839160019383601f196006971610612cda575b505050811b01910155612bbe565b015160001960f88460031b161c19169055388080612ccc565b8183015184558d985060019093019260209283019201612cac565b600684016000526020600020601f840160051c810160208510612d4e575b601f830160051c82018110612d42575050612b84565b60008155600101612d2c565b5080612d2c565b5060408c01511515612766565b7f08e8b9370000000000000000000000000000000000000000000000000000000060005260046000fd5b905067ffffffffffffffff4216101538612755565b612db79193503d806000833e6121ec8183611452565b91386126e1565b9290949391612dcb612627565b50855193612dd7612627565b94612de181611a2b565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156121fb57600092613537575b508151156121825792979091612e7684611e88565b98612e8085611a2b565b946000935b818510612e9d5750505050509561271e949596613db5565b91959398949699909297612eb18a846115a5565b519a60208c019867ffffffffffffffff8a51168015159081613522575b50612d625760408101511580613515575b61212e578a998d6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612f2d82611435565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b015160c08c015160e08d0151908d604081015190606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b60788401526079830152805190816099840191602001916130909261116c565b81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4810182526004016130f39082611452565b51902080600052600460205260406000205415613119575060010163ffffffff16612f87565b90509d979b9199929a949d9c909698939c80845280600052600460205260406000209184518355602085015160018401556132236002840167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a0850151600384015573ffffffffffffffffffffffffffffffffffffffff60c08601511673ffffffffffffffffffffffffffffffffffffffff6004850191167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff8060e088015116167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815561010086015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000083549260a01b16911617905561012085015192835167ffffffffffffffff81116113b25788946133446006840154611605565b601f81116134ba575b50602090601f831160011461344857600692916000918361343d575b50506000198260011b9260031b1c1916179101555b8d8b8b606084015180613410575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612bfe848660019e6120eb836133be9a6115a5565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a40193949a92909192612e85565b9250505061342d9193506000526004602052604060002054151590565b156121ac5785918d8b8b3861338c565b015190503880613369565b9060068401600052806000209160005b601f198516811061349f575091839160019383601f196006971610613486575b505050811b0191015561337e565b015160001960f88460031b161c19169055388080613478565b8183015184558c985060019093019260209283019201613458565b90919293949550600684016000526020600020601f840160051c81016020851061350e575b908b979695949392915b601f830160051c820181106134ff57505061334d565b600081558c98506001016134e9565b50806134df565b5060408d01511515612edf565b905067ffffffffffffffff4216101538612ece565b61354d9192503d806000833e6121ec8183611452565b9038612e61565b9061355e90611a2b565b90600081519160005b838110613575575050505090565b61357f81836115a5565b5180516000915b81831061359857505050600101613567565b909194600180916135a988856115a5565b516135b4828c6115a5565b520195019190613586565b9081600052600560205267ffffffffffffffff604060002054166136485767ffffffffffffffff9082600052600560205260406000208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516907f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f600080a3565b7f2e2679460000000000000000000000000000000000000000000000000000000060005260046000fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008210156137d2575b806d04ee2d6d415b85acef8100000000600a9210156137b7575b662386f26fc100008110156137a3575b6305f5e100811015613792575b612710811015613783575b6064811015613775575b101561376a575b600a60001960216001850194601f1961371e613708886116fa565b97613716604051998a611452565b8089526116fa565b013660208801378501015b01917f30313233343536373839616263646566000000000000000000000000000000008282061a835304801561376557600019600a9192613729565b505090565b6001909101906136ed565b6064600291049301926136e6565b612710600491049301926136dc565b6305f5e100600891049301926136d1565b662386f26fc10000601091049301926136c4565b6d04ee2d6d415b85acef8100000000602091049301926136b4565b50604091507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000810461369a565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806138fa575b15613862577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526138f460c082611452565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614613839565b60429061392e6137fa565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9190823b6139db579061397691614126565b5060048110156139ac5715918261398c57505090565b73ffffffffffffffffffffffffffffffffffffffff919250811691161490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092613a2b613a39859460405192839160208301957f1626ba7e000000000000000000000000000000000000000000000000000000008752602484015260406044840152606483019061118f565b03601f198101835282611452565b51915afa613a456140f6565b81613a8c575b81613a54575090565b90506020818051810103126101b757602001517f1626ba7e000000000000000000000000000000000000000000000000000000001490565b905060208151101590613a4b565b929160408401936040815282518095526060810194602060608260051b84010194019060005b818110613add575050506113249394506020818403910152611232565b909194602080613b17837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08860019603018c528951611266565b97019801910196919096613ac0565b93919080519460018614613d8f576020015173ffffffffffffffffffffffffffffffffffffffff16908115613d4b576000956040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa908115613d40578891613d02575b509087915b818310613c705750505091602091613be293876040518096819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613a9a565b03925af19081156121fb57600091613c36575b5015613c0c57613c03575090565b611324906143c8565b7fbf2f3a8b0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011613c68575b81613c5160209383611452565b810103126101b757613c6290611d99565b38613bf5565b3d9150613c44565b90919796613c7e89876115a5565b518015613cf7578215613ccd57818111613ca35780600192039801985b019190613b9a565b7f110112940000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1574f9f30000000000000000000000000000000000000000000000000000000060005260046000fd5b509697600190613c9b565b90506020813d602011613d38575b81613d1d60209383611452565b81010312613d3457613d2e90611d99565b38613b95565b8780fd5b3d9150613d10565b6040513d8a823e3d90fd5b50506000939192935b828110613d7857505050613d69575b50600090565b613d72906143c8565b38613d63565b613d8281836115a5565b51613ccd57600101613d54565b90611324955091613dae613da7600194969596611598565b5191611598565b5191614162565b81519492916000916001871461402a576020015173ffffffffffffffffffffffffffffffffffffffff16918215613fd25780966040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481885afa908115613fc7578391613f89575b509082915b818310613ef95750505091613e74939160209350876040518096819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613a9a565b03925af19081156121fb57600091613ebf575b5015613e9557613c03575090565b7fe8bee8390000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011613ef1575b81613eda60209383611452565b810103126101b757613eeb90611d99565b38613e87565b3d9150613ecd565b90919897613f078a886115a5565b51908115613f7e578215613f5657808211613f2e579080600192039901995b019190613e2a565b6004857f11011294000000000000000000000000000000000000000000000000000000008152fd5b6004857f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b989960019150613f26565b90506020813d602011613fbf575b81613fa460209383611452565b81010312613fbb57613fb590611d99565b38613e25565b8280fd5b3d9150613f97565b6040513d85823e3d90fd5b9592915050845b828110613feb57505050613c03575090565b613ff581836115a5565b5161400257600101613fd9565b6004867f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b9192906113249650613da7613dae91969596611598565b60ff81146140a55760ff811690601f821161407b5760408051926140658285611452565b60208452601f1960208501920136833783525290565b7fb3512b0c0000000000000000000000000000000000000000000000000000000060005260046000fd5b50604051611324816140b8816000611658565b0382611452565b60ff81146140e35760ff811690601f821161407b5760408051926140658285611452565b50604051611324816140b8816001611658565b3d15614121573d90614107826116fa565b916141156040519384611452565b82523d6000602084013e565b606090565b81519190604183036141575761415092506020820151906060604084015193015160001a9061445b565b9192909190565b505060009160029190565b60200151919492909173ffffffffffffffffffffffffffffffffffffffff169081156143b557908592918361431e575b602092919015614262576141dc916040519485809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611266565b03925af19081156121fb57600091614228575b50156141fe575b613c03575090565b7fccf3bb270000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d60201161425a575b8161424360209383611452565b810103126101b75761425490611d99565b386141ef565b3d9150614236565b6142a2916040519485809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611266565b03925af19081156121fb576000916142e4575b506141f6577fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011614316575b816142ff60209383611452565b810103126101b75761431090611d99565b386142b5565b3d91506142f2565b94919092506040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa9081156121fb5760009161437b575b5015613ccd57818611613ca3579085900393859290614192565b90506020813d6020116143ad575b8161439660209383611452565b810103126101b7576143a790611d99565b38614361565b3d9150614389565b5050509091613ccd57613d695750600090565b806143d05750565b80471061442a57600080808093335af16143e86140f6565b90156143f15750565b80511561440057805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116144e5579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa156121fb5760005173ffffffffffffffffffffffffffffffffffffffff8116156144d95790600090600090565b50600090600190600090565b5050506000916003919056fea264697066735822122074b5d998989c1d02a0efefc1cf194283bf1d892d8c0a27bb80769a4953be869b64736f6c634300081b0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c80630eabf66014610f1a57806312b11a1714610edf57806313893f6114610e6d57806317d7de7c14610d825780632d0335ab14610d3b5780633c04271514610c4957806344adc90e14610b6e5780634692626714610b2e5780634cb7e9e514610a5b5780634d00307014610a3157806354fd4d50146108e757806379f7573a1461085057806384b0196e146107625780639541152514610520578063a3112a64146104d3578063a6d4dbc7146103d2578063b469318d14610373578063b83010d314610338578063cf190f341461030d578063d45c4435146102d7578063e30bb563146102a1578063e71ff36514610230578063ed24911d1461020d578063f10b5cc8146101bc5763f17325e71461012f57600080fd5b60206003193601126101b75760043567ffffffffffffffff81116101b75780600401604060031983360301126101b75760206101a781936101ae936101896101756117d4565b9261018460243692018461183f565b611716565b61019283611598565b5261019c82611598565b503491339135612641565b0151611598565b51604051908152f35b600080fd5b346101b75760006003193601126101b757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b75760006003193601126101b75760206102286137fa565b604051908152f35b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b75761026190369060040161113b565b9067ffffffffffffffff42169160005b81811061028357602084604051908152f35b8061029b8561029560019486886115f5565b356135bf565b01610271565b346101b75760206003193601126101b75760206102cd6004356000526004602052604060002054151590565b6040519015158152f35b346101b75760206003193601126101b7576004356000526005602052602067ffffffffffffffff60406000205416604051908152f35b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004353361241b565b346101b75760006003193601126101b75760206040517fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e758152f35b346101b75760406003193601126101b75773ffffffffffffffffffffffffffffffffffffffff6103a16111b4565b1660005260066020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b6101006003193601126101b7576040516103eb81611396565b6004358082526103fa3661148d565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126101b757604051610435816113fd565b60643560ff811681036101b7578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff811681036101b75780606084015260e43567ffffffffffffffff811681036101b757836104a59160806104d1960152611bd5565b6104ad6119dc565b6104b63661148d565b6104bf82611598565b526104c981611598565b503492611ed7565b005b346101b75760206003193601126101b7576104ec611ab0565b50600435600052600460205261051c6105086040600020611b03565b604051918291602083526020830190611266565b0390f35b60206003193601126101b75760043567ffffffffffffffff81116101b75761054c90369060040161113b565b61055581611893565b9060009234916000916000198201925b8281106105855761051c6105798888613554565b604051918291826111f8565b919395909294610596838686611327565b966105a4602089018961191c565b90958115801561074a575b6107205760808a0135979060005b838110156106b25760008c6105e56105da8460051b8d018d61183f565b916040810190611a5c565b849291921015610685576105fb8f606001611872565b928d67ffffffffffffffff811603610682575073ffffffffffffffffffffffffffffffffffffffff8f919361065c61067c9461064b600198976040519661064188611396565b3587523690611716565b602086015236906060880201611545565b604084015216606082015267ffffffffffffffff8d1660808201526124f0565b016105bd565b80fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b50959989985083976106f69296946020946106ed936106e68f9e60019a9f14946106de60608401611872565b933691611970565b9035612dbe565b968751906115b9565b950180516107048a8a6115a5565b5261070f89896115a5565b505151019601939293919091610565565b7f947d5a840000000000000000000000000000000000000000000000000000000060005260046000fd5b5061075860408b018b611a5c565b90508214156105af565b346101b75760006003193601126101b75760e061079e7f0000000000000000000000000000000000000000000000000000000000000000614041565b61051c6107ca7f00000000000000000000000000000000000000000000000000000000000000006140bf565b9161082f602093610821604051936107e28786611452565b6000855260003681376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895288015260e087019061118f565b90858203604087015261118f565b90466060850152306080850152600060a085015283820360c0850152611232565b346101b75760206003193601126101b75760043533600052600360205260406000205490818111156108bd577f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb79160409133600052600360205280836000205582519182526020820152a1005b7f756688fe0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b75760006003193601126101b75761051c6109247f0000000000000000000000000000000000000000000000000000000000000000613672565b610a1d60016109527f0000000000000000000000000000000000000000000000000000000000000000613672565b928161097d7f0000000000000000000000000000000000000000000000000000000000000000613672565b60206040519684610997899651809285808a01910161116c565b85017f2e00000000000000000000000000000000000000000000000000000000000000838201526109d1825180938560218501910161116c565b01017f2e0000000000000000000000000000000000000000000000000000000000000083820152610a0c82518093602060028501910161116c565b01010301601f198101835282611452565b60405191829160208352602083019061118f565b346101b75760206003193601126101b757602067ffffffffffffffff4216610228816004356135bf565b60206003193601126101b75760043567ffffffffffffffff81116101b757610a8790369060040161113b565b60001981019190600090345b818310610a9c57005b610aa78383866118dc565b60208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101b75781019182359267ffffffffffffffff84116101b757602001928060061b360384136101b75760019382610b2092610b2695610b198c8b1494339336916114d3565b9035612207565b906115b9565b920191610a93565b60606003193601126101b7576104d1610b456119dc565b610b4e3661148d565b610b5782611598565b52610b6181611598565b5034903390600435611ed7565b60206003193601126101b75760043567ffffffffffffffff81116101b757610b9a90369060040161113b565b90610ba482611893565b9160009134906000926000198101905b808510610bc85761051c6105798789613554565b9091929394610bd88683866118dc565b906020820191610be8838261191c565b90501561072057610c21610c18898988856106e6610c0a60019a60209961191c565b939095149433933691611970565b978851906115b9565b96018051610c2f898b6115a5565b52610c3a888a6115a5565b50515101950193929190610bb4565b60206003193601126101b75760043567ffffffffffffffff81116101b757806004019060e060031982360301126101b757604051610c8681611396565b823592838252602483019384359467ffffffffffffffff86116101b757610d336101ae95610d1a6101a795610d0760209a98610cc98c9a60043691880101611716565b8a820152610cda3660448701611545565b6040820152610cfd60c460a4870196610cf2886111d7565b606085015201611583565b60808201526124f0565b610184610d126117d4565b95369261183f565b610d2384611598565b52610d2d83611598565b50611872565b903492612641565b346101b75760206003193601126101b75773ffffffffffffffffffffffffffffffffffffffff610d696111b4565b1660005260036020526020604060002054604051908152f35b346101b75760006003193601126101b7576040516000600254610da481611605565b8084529060018116908115610e2b5750600114610dcc575b61051c83610a1d81850382611452565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b808210610e1157509091508101602001610a1d610dbc565b919260018160209254838588010152019101909291610df9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610a1d9050610dbc565b346101b75760206003193601126101b75760043567ffffffffffffffff81116101b757610e9e90369060040161113b565b9067ffffffffffffffff42169160005b818110610ec057602084604051908152f35b80610ed985610ed260019486886115f5565b353361241b565b01610eae565b346101b75760006003193601126101b75760206040517ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768152f35b60206003193601126101b75760043567ffffffffffffffff81116101b757610f4690369060040161113b565b600019810191600091345b818410610f5a57005b610f65848385611327565b60a0813603126101b757604051610f7b81611396565b81358152602082013567ffffffffffffffff81116101b757820136601f820112156101b757610fb19036906020813591016114d3565b9060208101918252604083013567ffffffffffffffff81116101b757830136601f820112156101b757803590610fe682611475565b91610ff46040519384611452565b808352602060608185019202830101913683116101b757602001905b82821061112157505050604082018181526110406080611032606088016111d7565b966060860197885201611583565b936080840194855251938451928315908115611115575b506107205760005b8381106110a2575050505061109a928460019593610b2093519073ffffffffffffffffffffffffffffffffffffffff8c8c1494511691612207565b930192610f51565b60019061110f86516110b4838a6115a5565b516110c08488516115a5565b5173ffffffffffffffffffffffffffffffffffffffff8c51169067ffffffffffffffff88511692604051946110f486611396565b85526020850152604084015260608301526080820152611bd5565b0161105f565b9050518314158c611057565b60206060916111303685611545565b815201910190611010565b9181601f840112156101b75782359167ffffffffffffffff83116101b7576020808501948460051b0101116101b757565b60005b83811061117f5750506000910152565b818101518382015260200161116f565b90601f19601f6020936111ad8151809281875287808801910161116c565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b602060408183019282815284518094520192019060005b81811061121c5750505090565b825184526020938401939092019160010161120f565b906020808351928381520192019060005b8181106112505750505090565b8251845260209384019390920191600101611243565b9061014061012061132493805184526020810151602085015267ffffffffffffffff604082015116604085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015260a081015160a085015273ffffffffffffffffffffffffffffffffffffffff60c08201511660c085015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e0850152610100810151151561010085015201519181610120820152019061118f565b90565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156101b7570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60a0810190811067ffffffffffffffff8211176113b257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176113b257604052565b6060810190811067ffffffffffffffff8211176113b257604052565b60c0810190811067ffffffffffffffff8211176113b257604052565b610140810190811067ffffffffffffffff8211176113b257604052565b90601f601f19910116810190811067ffffffffffffffff8211176113b257604052565b67ffffffffffffffff81116113b25760051b60200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60409101126101b757604051906114c4826113e1565b60243582526044356020830152565b9291926114df82611475565b936114ed6040519586611452565b602085848152019260061b8201918183116101b757925b8284106115115750505050565b600060408584031261068257506020604091825161152e816113e1565b863581528287013583820152815201930192611504565b91908260609103126101b75760405161155d816113fd565b8092803560ff811681036101b75760409182918452602081013560208501520135910152565b359067ffffffffffffffff821682036101b757565b8051156113675760200190565b80518210156113675760209160051b010190565b919082039182116115c657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156113675760051b0190565b90600182811c9216801561164e575b602083101461161f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611614565b6000929181549161166883611605565b80835292600181169081156116be575060011461168457505050565b60009081526020812093945091925b8383106116a4575060209250010190565b600181602092949394548385870101520191019190611693565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b67ffffffffffffffff81116113b257601f01601f191660200190565b919060c0838203126101b7576040519061172f82611419565b819361173a816111d7565b835261174860208201611583565b6020840152604081013580151581036101b757604084015260608101356060840152608081013567ffffffffffffffff81116101b75781019082601f830112156101b757813592611798846116fa565b906117a66040519283611452565b848252602085850101116101b757600060208560a09682889701838601378301015260808501520135910152565b604080519091906117e58382611452565b6001815291601f19018260005b8281106117fe57505050565b60209060405161180d81611419565b60008152600083820152600060408201526000606082015260606080820152600060a0820152828285010152016117f2565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156101b7570190565b3573ffffffffffffffffffffffffffffffffffffffff811681036101b75790565b9061189d82611475565b6118aa6040519182611452565b828152601f196118ba8294611475565b019060005b8281106118cb57505050565b8060606020809385010152016118bf565b91908110156113675760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156101b7570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b757602001918160051b360383136101b757565b92919061197c81611475565b9361198a6040519586611452565b602085838152019160051b8101918383116101b75781905b8382106119b0575050505050565b813567ffffffffffffffff81116101b7576020916119d18784938701611716565b8152019101906119a2565b604080519091906119ed8382611452565b6001815291601f19018260005b828110611a0657505050565b602090604051611a15816113e1565b60008152600083820152828285010152016119fa565b90611a3582611475565b611a426040519182611452565b828152601f19611a528294611475565b0190602036910137565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b7570180359067ffffffffffffffff82116101b7576020019160608202360383136101b757565b60405190611abd82611435565b60606101208360008152600060208201526000604082015260008382015260006080820152600060a0820152600060c0820152600060e082015260006101008201520152565b906006610120604051611b1581611435565b611bc28195805483526001810154602084015267ffffffffffffffff60028201548181166040860152818160401c16606086015260801c166080840152600381015460a084015273ffffffffffffffffffffffffffffffffffffffff60048201541660c084015260ff600582015473ffffffffffffffffffffffffffffffffffffffff811660e086015260a01c161515610100840152611bbb6040518096819301611658565b0384611452565b0152565b60001981146115c65760010190565b6080810167ffffffffffffffff8151168015159081611d85575b50611d5b578173ffffffffffffffffffffffffffffffffffffffff611cba6020611d2a950151926040810151946060820194848651169251916020825192015184600052600360205267ffffffffffffffff604060002092835493611c5385611bc6565b90555116926040519460208601967fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75885260408701526060860152608085015260a084015260c083015260e082015260e08152611cb261010082611452565b519020613923565b915116611d256020840151611d1760ff60408701519651166040519687936020850191926041937fff00000000000000000000000000000000000000000000000000000000000000928452602084015260f81b1660408201520190565b03601f198101855284611452565b613964565b15611d3157565b7f8baa579f0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1ab7da6b0000000000000000000000000000000000000000000000000000000060005260046000fd5b905067ffffffffffffffff42161138611bef565b519081151582036101b757565b6020818303126101b75780519067ffffffffffffffff82116101b75701906080828203126101b757604051916080830183811067ffffffffffffffff8211176113b25760405280518352602081015173ffffffffffffffffffffffffffffffffffffffff811681036101b7576020840152611e2360408201611d99565b604084015260608101519067ffffffffffffffff82116101b7570181601f820112156101b7578051611e54816116fa565b92611e626040519485611452565b818452602082840101116101b757611e80916020808501910161116c565b606082015290565b90611e9282611475565b611e9f6040519182611452565b828152601f19611eaf8294611475565b019060005b828110611ec057505050565b602090611ecb611ab0565b82828501015201611eb4565b9190604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825283600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156121fb576000926121d6575b508151156121825792835190611f6982611e88565b93611f7383611a2b565b954267ffffffffffffffff169060005b858110611f9e57505050505050916113249391600193613b26565b611fa881836115a5565b5190815160005260046020526040600020918254156121ac578660018401540361218257600583015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600284019167ffffffffffffffff835460801c16612104577ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff8f8f886120f1918f99936120c78f9d6120c260019f60c098907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b611b03565b6120d184846115a5565b526120dc83836115a5565b506120eb83888b0151926115a5565b526115a5565b510151169251604051908152a401611f83565b7f905e71070000000000000000000000000000000000000000000000000000000060005260046000fd5b7f157bd4c30000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4ca888670000000000000000000000000000000000000000000000000000000060005260046000fd5b7fbf37b20e0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc5723b510000000000000000000000000000000000000000000000000000000060005260046000fd5b6121f49192503d806000833e6121ec8183611452565b810190611da6565b9038611f54565b6040513d6000823e3d90fd5b949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815286600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156121fb57600091612400575b5080511561218257825161229881611e88565b926122a282611a2b565b944267ffffffffffffffff169060005b8481106122c9575050505050611324959650613b26565b6122d381836115a5565b51908151600052600460205260406000208054156121ac578d60018201540361218257600581015473ffffffffffffffffffffffffffffffffffffffff8716908173ffffffffffffffffffffffffffffffffffffffff8216036121585760a01c60ff161561212e57600282019367ffffffffffffffff855460801c16612104578f92602073ffffffffffffffffffffffffffffffffffffffff60c08f8f89906123ed926120c78f986120c260019f9a7ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6159b907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b510151169251604051908152a4016122b2565b61241591503d806000833e6121ec8183611452565b38612285565b73ffffffffffffffffffffffffffffffffffffffff1691826000526006602052604060002090826000528160205267ffffffffffffffff604060002054166124c65767ffffffffffffffff918360005260205260406000208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a2229600080a4565b7fec9d6eeb0000000000000000000000000000000000000000000000000000000060005260046000fd5b6080810167ffffffffffffffff8151168015159081612613575b50611d5b578173ffffffffffffffffffffffffffffffffffffffff611cba6020611d2a95015192604081015194606082019484865116925191858251169167ffffffffffffffff602082015116906040810151151560608201519060a06080840151602081519101209301519388600052600360205267ffffffffffffffff60406000209687549761259b89611bc6565b90555116966040519860208a019a7ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880768c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152611cb261018082611452565b905067ffffffffffffffff4216113861250a565b60405190612634826113e1565b6060602083600081520152565b929161264b612627565b50815193612657612627565b9461266181611a2b565b6020870152604051917fa2ea7c6e00000000000000000000000000000000000000000000000000000000835280600484015260008360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9283156121fb57600093612da1575b50825115612182576126f582949592611e88565b936126ff81611a2b565b956000935b8285106127235750505050509161271e9391600193613db5565b815290565b919599909498939761273889849995996115a5565b519960208b019767ffffffffffffffff8951168015159081612d8c575b50612d625760408201511580612d55575b61212e5789988c6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519d8e6127b381611435565b60008152602001528d4267ffffffffffffffff1660408201526060015260808d016000905260a08d015260c08c015273ffffffffffffffffffffffffffffffffffffffff8a1660e08c01526101008b01526101208a015260005b60208a015160c08b015160e08c01519060408d01518d606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b60788401526079830152805190816099840191602001916129159261116c565b81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4810182526004016129789082611452565b5190208060005260046020526040600020541561299e575060010163ffffffff1661280d565b91979d99939b929895949c905099959981845281600052600460205260406000208451815560208501516001820155612aa66002820167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085810151600383015560c08601516004830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560e08701516005840180546101008a01517fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791151590921b74ff00000000000000000000000000000000000000001617905561012085015180519067ffffffffffffffff82116113b257612b7b6006840154611605565b601f8111612d0e575b50909e9f9e8994939291602090601f8311600114612c9c576006929160009183612c91575b50506000198260011b9260031b1c1916179101555b8d8c8c606084015180612c64575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612bfe848660019e6120eb83612c169a6115a5565b50612c0e8460a0890151926115a5565b5201516115a5565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff891693a401939190612704565b92505050612c819193506000526004602052604060002054151590565b156121ac5786918d8c8c38612bcc565b015190503880612ba9565b9060068401600052806000209160005b601f1985168110612cf3575091839160019383601f196006971610612cda575b505050811b01910155612bbe565b015160001960f88460031b161c19169055388080612ccc565b8183015184558d985060019093019260209283019201612cac565b600684016000526020600020601f840160051c810160208510612d4e575b601f830160051c82018110612d42575050612b84565b60008155600101612d2c565b5080612d2c565b5060408c01511515612766565b7f08e8b9370000000000000000000000000000000000000000000000000000000060005260046000fd5b905067ffffffffffffffff4216101538612755565b612db79193503d806000833e6121ec8183611452565b91386126e1565b9290949391612dcb612627565b50855193612dd7612627565b94612de181611a2b565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156121fb57600092613537575b508151156121825792979091612e7684611e88565b98612e8085611a2b565b946000935b818510612e9d5750505050509561271e949596613db5565b91959398949699909297612eb18a846115a5565b519a60208c019867ffffffffffffffff8a51168015159081613522575b50612d625760408101511580613515575b61212e578a998d6060810151915167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612f2d82611435565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b015160c08c015160e08d0151908d604081015190606081015161010082015115159060a08301519261012001519360405196879660208801998a5260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604088015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016605487015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606886015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016607085015260f81b60788401526079830152805190816099840191602001916130909261116c565b81018460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166099820152036099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4810182526004016130f39082611452565b51902080600052600460205260406000205415613119575060010163ffffffff16612f87565b90509d979b9199929a949d9c909698939c80845280600052600460205260406000209184518355602085015160018401556132236002840167ffffffffffffffff80604089015116167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617815560608701517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b16911617815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a0850151600384015573ffffffffffffffffffffffffffffffffffffffff60c08601511673ffffffffffffffffffffffffffffffffffffffff6004850191167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff8060e088015116167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815561010086015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000083549260a01b16911617905561012085015192835167ffffffffffffffff81116113b25788946133446006840154611605565b601f81116134ba575b50602090601f831160011461344857600692916000918361343d575b50506000198260011b9260031b1c1916179101555b8d8b8b606084015180613410575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612bfe848660019e6120eb836133be9a6115a5565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a40193949a92909192612e85565b9250505061342d9193506000526004602052604060002054151590565b156121ac5785918d8b8b3861338c565b015190503880613369565b9060068401600052806000209160005b601f198516811061349f575091839160019383601f196006971610613486575b505050811b0191015561337e565b015160001960f88460031b161c19169055388080613478565b8183015184558c985060019093019260209283019201613458565b90919293949550600684016000526020600020601f840160051c81016020851061350e575b908b979695949392915b601f830160051c820181106134ff57505061334d565b600081558c98506001016134e9565b50806134df565b5060408d01511515612edf565b905067ffffffffffffffff4216101538612ece565b61354d9192503d806000833e6121ec8183611452565b9038612e61565b9061355e90611a2b565b90600081519160005b838110613575575050505090565b61357f81836115a5565b5180516000915b81831061359857505050600101613567565b909194600180916135a988856115a5565b516135b4828c6115a5565b520195019190613586565b9081600052600560205267ffffffffffffffff604060002054166136485767ffffffffffffffff9082600052600560205260406000208282167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905516907f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f600080a3565b7f2e2679460000000000000000000000000000000000000000000000000000000060005260046000fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008210156137d2575b806d04ee2d6d415b85acef8100000000600a9210156137b7575b662386f26fc100008110156137a3575b6305f5e100811015613792575b612710811015613783575b6064811015613775575b101561376a575b600a60001960216001850194601f1961371e613708886116fa565b97613716604051998a611452565b8089526116fa565b013660208801378501015b01917f30313233343536373839616263646566000000000000000000000000000000008282061a835304801561376557600019600a9192613729565b505090565b6001909101906136ed565b6064600291049301926136e6565b612710600491049301926136dc565b6305f5e100600891049301926136d1565b662386f26fc10000601091049301926136c4565b6d04ee2d6d415b85acef8100000000602091049301926136b4565b50604091507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000810461369a565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806138fa575b15613862577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526138f460c082611452565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614613839565b60429061392e6137fa565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9190823b6139db579061397691614126565b5060048110156139ac5715918261398c57505090565b73ffffffffffffffffffffffffffffffffffffffff919250811691161490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092613a2b613a39859460405192839160208301957f1626ba7e000000000000000000000000000000000000000000000000000000008752602484015260406044840152606483019061118f565b03601f198101835282611452565b51915afa613a456140f6565b81613a8c575b81613a54575090565b90506020818051810103126101b757602001517f1626ba7e000000000000000000000000000000000000000000000000000000001490565b905060208151101590613a4b565b929160408401936040815282518095526060810194602060608260051b84010194019060005b818110613add575050506113249394506020818403910152611232565b909194602080613b17837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08860019603018c528951611266565b97019801910196919096613ac0565b93919080519460018614613d8f576020015173ffffffffffffffffffffffffffffffffffffffff16908115613d4b576000956040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa908115613d40578891613d02575b509087915b818310613c705750505091602091613be293876040518096819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613a9a565b03925af19081156121fb57600091613c36575b5015613c0c57613c03575090565b611324906143c8565b7fbf2f3a8b0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011613c68575b81613c5160209383611452565b810103126101b757613c6290611d99565b38613bf5565b3d9150613c44565b90919796613c7e89876115a5565b518015613cf7578215613ccd57818111613ca35780600192039801985b019190613b9a565b7f110112940000000000000000000000000000000000000000000000000000000060005260046000fd5b7f1574f9f30000000000000000000000000000000000000000000000000000000060005260046000fd5b509697600190613c9b565b90506020813d602011613d38575b81613d1d60209383611452565b81010312613d3457613d2e90611d99565b38613b95565b8780fd5b3d9150613d10565b6040513d8a823e3d90fd5b50506000939192935b828110613d7857505050613d69575b50600090565b613d72906143c8565b38613d63565b613d8281836115a5565b51613ccd57600101613d54565b90611324955091613dae613da7600194969596611598565b5191611598565b5191614162565b81519492916000916001871461402a576020015173ffffffffffffffffffffffffffffffffffffffff16918215613fd25780966040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481885afa908115613fc7578391613f89575b509082915b818310613ef95750505091613e74939160209350876040518096819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613a9a565b03925af19081156121fb57600091613ebf575b5015613e9557613c03575090565b7fe8bee8390000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011613ef1575b81613eda60209383611452565b810103126101b757613eeb90611d99565b38613e87565b3d9150613ecd565b90919897613f078a886115a5565b51908115613f7e578215613f5657808211613f2e579080600192039901995b019190613e2a565b6004857f11011294000000000000000000000000000000000000000000000000000000008152fd5b6004857f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b989960019150613f26565b90506020813d602011613fbf575b81613fa460209383611452565b81010312613fbb57613fb590611d99565b38613e25565b8280fd5b3d9150613f97565b6040513d85823e3d90fd5b9592915050845b828110613feb57505050613c03575090565b613ff581836115a5565b5161400257600101613fd9565b6004867f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b9192906113249650613da7613dae91969596611598565b60ff81146140a55760ff811690601f821161407b5760408051926140658285611452565b60208452601f1960208501920136833783525290565b7fb3512b0c0000000000000000000000000000000000000000000000000000000060005260046000fd5b50604051611324816140b8816000611658565b0382611452565b60ff81146140e35760ff811690601f821161407b5760408051926140658285611452565b50604051611324816140b8816001611658565b3d15614121573d90614107826116fa565b916141156040519384611452565b82523d6000602084013e565b606090565b81519190604183036141575761415092506020820151906060604084015193015160001a9061445b565b9192909190565b505060009160029190565b60200151919492909173ffffffffffffffffffffffffffffffffffffffff169081156143b557908592918361431e575b602092919015614262576141dc916040519485809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611266565b03925af19081156121fb57600091614228575b50156141fe575b613c03575090565b7fccf3bb270000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d60201161425a575b8161424360209383611452565b810103126101b75761425490611d99565b386141ef565b3d9150614236565b6142a2916040519485809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611266565b03925af19081156121fb576000916142e4575b506141f6577fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506020813d602011614316575b816142ff60209383611452565b810103126101b75761431090611d99565b386142b5565b3d91506142f2565b94919092506040517fce46e046000000000000000000000000000000000000000000000000000000008152602081600481875afa9081156121fb5760009161437b575b5015613ccd57818611613ca3579085900393859290614192565b90506020813d6020116143ad575b8161439660209383611452565b810103126101b7576143a790611d99565b38614361565b3d9150614389565b5050509091613ccd57613d695750600090565b806143d05750565b80471061442a57600080808093335af16143e86140f6565b90156143f15750565b80511561440057805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116144e5579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa156121fb5760005173ffffffffffffffffffffffffffffffffffffffff8116156144d95790600090600090565b50600090600190600090565b5050506000916003919056fea264697066735822122074b5d998989c1d02a0efefc1cf194283bf1d892d8c0a27bb80769a4953be869b64736f6c634300081b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}

declare module "@nomicfoundation/hardhat-viem/types" {
  export function deployContract(
    contractName: "CustomEAS",
    constructorArgs: [registry: AbiParameterToPrimitiveType<{"name":"registry","type":"address"}>],
    config?: DeployContractConfig
  ): Promise<GetContractReturnType<CustomEAS$Type["abi"]>>;
  export function deployContract(
    contractName: "contracts/CustomEAS.sol:CustomEAS",
    constructorArgs: [registry: AbiParameterToPrimitiveType<{"name":"registry","type":"address"}>],
    config?: DeployContractConfig
  ): Promise<GetContractReturnType<CustomEAS$Type["abi"]>>;

  export function sendDeploymentTransaction(
    contractName: "CustomEAS",
    constructorArgs: [registry: AbiParameterToPrimitiveType<{"name":"registry","type":"address"}>],
    config?: SendDeploymentTransactionConfig
  ): Promise<{
    contract: GetContractReturnType<CustomEAS$Type["abi"]>;
    deploymentTransaction: GetTransactionReturnType;
  }>;
  export function sendDeploymentTransaction(
    contractName: "contracts/CustomEAS.sol:CustomEAS",
    constructorArgs: [registry: AbiParameterToPrimitiveType<{"name":"registry","type":"address"}>],
    config?: SendDeploymentTransactionConfig
  ): Promise<{
    contract: GetContractReturnType<CustomEAS$Type["abi"]>;
    deploymentTransaction: GetTransactionReturnType;
  }>;

  export function getContractAt(
    contractName: "CustomEAS",
    address: Address,
    config?: GetContractAtConfig
  ): Promise<GetContractReturnType<CustomEAS$Type["abi"]>>;
  export function getContractAt(
    contractName: "contracts/CustomEAS.sol:CustomEAS",
    address: Address,
    config?: GetContractAtConfig
  ): Promise<GetContractReturnType<CustomEAS$Type["abi"]>>;
}
