UNPKG

@towns-protocol/generated

Version:

## How to generate contract types

986 lines (984 loc) 56.7 kB
/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; import type { Provider, TransactionRequest } from "@ethersproject/providers"; import type { PromiseOrValue } from "../common"; import type { MockEntitlementGated, MockEntitlementGatedInterface, } from "../MockEntitlementGated"; const _abi = [ { type: "constructor", inputs: [ { name: "checker", type: "address", internalType: "contract IEntitlementChecker", }, ], stateMutability: "nonpayable", }, { type: "function", name: "__EntitlementGated_init", inputs: [ { name: "entitlementChecker", type: "address", internalType: "contract IEntitlementChecker", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "getCrossChainEntitlementData", inputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, { name: "roleId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "tuple", internalType: "struct IEntitlementDataQueryableBase.EntitlementData", components: [ { name: "entitlementType", type: "string", internalType: "string", }, { name: "entitlementData", type: "bytes", internalType: "bytes", }, ], }, ], stateMutability: "view", }, { type: "function", name: "getRuleData", inputs: [ { name: "roleId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleData", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "threshold", type: "uint256", internalType: "uint256", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], stateMutability: "view", }, { type: "function", name: "getRuleData", inputs: [ { name: "transactionId", type: "bytes32", internalType: "bytes32", }, { name: "roleId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleData", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "threshold", type: "uint256", internalType: "uint256", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], stateMutability: "view", }, { type: "function", name: "getRuleDataV2", inputs: [ { name: "roleId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleDataV2", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperationV2[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "params", type: "bytes", internalType: "bytes", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], stateMutability: "view", }, { type: "function", name: "joinSpace", inputs: [ { name: "receiver", type: "address", internalType: "address", }, { name: "roleIds", type: "uint256[]", internalType: "uint256[]", }, { name: "ruleData", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleDataV2", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperationV2[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "params", type: "bytes", internalType: "bytes", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "payable", }, { type: "function", name: "postEntitlementCheckResult", inputs: [ { name: "transactionId", type: "bytes32", internalType: "bytes32", }, { name: "roleId", type: "uint256", internalType: "uint256", }, { name: "result", type: "uint8", internalType: "enum IEntitlementGatedBase.NodeVoteStatus", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "postEntitlementCheckResultV2", inputs: [ { name: "transactionId", type: "bytes32", internalType: "bytes32", }, { name: "roleId", type: "uint256", internalType: "uint256", }, { name: "result", type: "uint8", internalType: "enum IEntitlementGatedBase.NodeVoteStatus", }, ], outputs: [], stateMutability: "payable", }, { type: "function", name: "requestEntitlementCheckV1RuleDataV1", inputs: [ { name: "roleId", type: "uint256", internalType: "uint256", }, { name: "ruleData", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleData", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "threshold", type: "uint256", internalType: "uint256", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "nonpayable", }, { type: "function", name: "requestEntitlementCheckV1RuleDataV2", inputs: [ { name: "roleIds", type: "uint256[]", internalType: "uint256[]", }, { name: "ruleData", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleDataV2", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperationV2[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "params", type: "bytes", internalType: "bytes", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "nonpayable", }, { type: "function", name: "requestEntitlementCheckV2RuleDataV1", inputs: [ { name: "roleIds", type: "uint256[]", internalType: "uint256[]", }, { name: "ruleData", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleData", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "threshold", type: "uint256", internalType: "uint256", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "payable", }, { type: "function", name: "requestEntitlementCheckV2RuleDataV2", inputs: [ { name: "roleIds", type: "uint256[]", internalType: "uint256[]", }, { name: "ruleData", type: "tuple", internalType: "struct IRuleEntitlementBase.RuleDataV2", components: [ { name: "operations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.Operation[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CombinedOperationType", }, { name: "index", type: "uint8", internalType: "uint8", }, ], }, { name: "checkOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.CheckOperationV2[]", components: [ { name: "opType", type: "uint8", internalType: "enum IRuleEntitlementBase.CheckOperationType", }, { name: "chainId", type: "uint256", internalType: "uint256", }, { name: "contractAddress", type: "address", internalType: "address", }, { name: "params", type: "bytes", internalType: "bytes", }, ], }, { name: "logicalOperations", type: "tuple[]", internalType: "struct IRuleEntitlementBase.LogicalOperation[]", components: [ { name: "logOpType", type: "uint8", internalType: "enum IRuleEntitlementBase.LogicalOperationType", }, { name: "leftOperationIndex", type: "uint8", internalType: "uint8", }, { name: "rightOperationIndex", type: "uint8", internalType: "uint8", }, ], }, ], }, ], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "payable", }, { type: "event", name: "EntitlementCheckResultPosted", inputs: [ { name: "transactionId", type: "bytes32", indexed: true, internalType: "bytes32", }, { name: "result", type: "uint8", indexed: false, internalType: "enum IEntitlementGatedBase.NodeVoteStatus", }, ], anonymous: false, }, { type: "event", name: "Initialized", inputs: [ { name: "version", type: "uint32", indexed: false, internalType: "uint32", }, ], anonymous: false, }, { type: "event", name: "InterfaceAdded", inputs: [ { name: "interfaceId", type: "bytes4", indexed: true, internalType: "bytes4", }, ], anonymous: false, }, { type: "event", name: "InterfaceRemoved", inputs: [ { name: "interfaceId", type: "bytes4", indexed: true, internalType: "bytes4", }, ], anonymous: false, }, { type: "error", name: "EntitlementGated_InvalidAddress", inputs: [], }, { type: "error", name: "EntitlementGated_InvalidEntitlement", inputs: [], }, { type: "error", name: "EntitlementGated_InvalidValue", inputs: [], }, { type: "error", name: "EntitlementGated_NodeAlreadyVoted", inputs: [], }, { type: "error", name: "EntitlementGated_NodeNotFound", inputs: [], }, { type: "error", name: "EntitlementGated_OnlyEntitlementChecker", inputs: [], }, { type: "error", name: "EntitlementGated_RequestIdNotFound", inputs: [], }, { type: "error", name: "EntitlementGated_TransactionCheckAlreadyCompleted", inputs: [], }, { type: "error", name: "EntitlementGated_TransactionCheckAlreadyRegistered", inputs: [], }, { type: "error", name: "EntitlementGated_TransactionNotRegistered", inputs: [], }, { type: "error", name: "Initializable_InInitializingState", inputs: [], }, { type: "error", name: "Initializable_NotInInitializingState", inputs: [], }, { type: "error", name: "Introspection_AlreadySupported", inputs: [], }, { type: "error", name: "Introspection_NotSupported", inputs: [], }, { type: "error", name: "Reentrancy", inputs: [], }, ] as const; const _bytecode = "0x608060405234801561000f575f5ffd5b50604051613a96380380613a9683398101604081905261002e9161011c565b610036610076565b7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e0080546001600160a01b0319166001600160a01b03831617905550610149565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156100c2576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101561011957805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b5f6020828403121561012c575f5ffd5b81516001600160a01b0381168114610142575f5ffd5b9392505050565b613940806101565f395ff3fe6080604052600436106100c3575f3560e01c806392c399ff11610071578063caeb80881161004c578063caeb808814610206578063e58690f214610219578063ffbfd74d1461022c575f5ffd5b806392c399ff146101c1578063bef1bee1146101e0578063c1066f18146101f3575f5ffd5b80635bf0fec7116100a15780635bf0fec71461014957806368ab7dd6146101765780637adc9cbe146101a2575f5ffd5b8063069a3ee9146100c75780630fe44a21146100fc5780634739e80514610128575b5f5ffd5b3480156100d2575f5ffd5b506100e66100e1366004611fca565b61024b565b6040516100f391906120e2565b60405180910390f35b348015610107575f5ffd5b5061011b6101163660046121db565b610485565b6040516100f39190612247565b348015610133575f5ffd5b506101476101423660046122a9565b61057f565b005b348015610154575f5ffd5b506101686101633660046122f5565b6105c5565b6040519081526020016100f3565b348015610181575f5ffd5b50610195610190366004611fca565b610644565b6040516100f39190612339565b3480156101ad575f5ffd5b506101476101bc36600461249d565b6108f6565b3480156101cc575f5ffd5b506100e66101db3660046121db565b610965565b6101686101ee366004612500565b610993565b61016861020136600461257c565b610a46565b61016861021436600461257c565b610af7565b6101476102273660046122a9565b610b42565b348015610237575f5ffd5b5061016861024636600461257c565b610bde565b61026f60405180606001604052806060815260200160608152602001606081525090565b5f828152602081815260408083208151815460809481028201850190935260608101838152909491938593919285929185015b8282101561030a575f84815260209020604080518082019091529083018054829060ff1660028111156102d7576102d7611fe1565b60028111156102e8576102e8611fe1565b81529054610100900460ff1660209182015290825260019290920191016102a2565b50505050815260200160018201805480602002602001604051908101604052809291908181526020015f905b828210156103cd575f848152602090206040805160808101909152600484029091018054829060ff16600681111561037057610370611fe1565b600681111561038157610381611fe1565b8152600182810154602080840191909152600284015473ffffffffffffffffffffffffffffffffffffffff16604084015260039093015460609092019190915291835292019101610336565b50505050815260200160028201805480602002602001604051908101604052809291908181526020015f905b82821015610477575f8481526020902060408051606081019091529083018054829060ff16600281111561042f5761042f611fe1565b600281111561044057610440611fe1565b8152905460ff61010082048116602080850191909152620100009092041660409092019190915290825260019290920191016103f9565b505050915250909392505050565b60408051808201909152606080825260208201525f828152602081905260409020541561051e5760408051608081018252600f8183019081527f52756c65456e7469746c656d656e740000000000000000000000000000000000606083015281525f8481526020818152908390209251919281840192610505920161268a565b6040516020818303038152906040528152509050610579565b6040805160808101825260118183019081527f52756c65456e7469746c656d656e745632000000000000000000000000000000606083015281525f8481526001602090815290839020925191928184019261050592016127c7565b92915050565b3068929eee149b4bd21268540361059d5763ab143c065f526004601cfd5b3068929eee149b4bd21268556105b4838383610cda565b3868929eee149b4bd2126855505050565b5f82815260208190526040812082906105de8282612e88565b50506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003260601b1660208201524360348201525f9060540160405160208183030381529060405280519060200120905061063d3382308761108d565b9392505050565b61066860405180606001604052806060815260200160608152602001606081525090565b5f8281526001602090815260408083208151815460809481028201850190935260608101838152909491938593919285929185015b82821015610705575f84815260209020604080518082019091529083018054829060ff1660028111156106d2576106d2611fe1565b60028111156106e3576106e3611fe1565b81529054610100900460ff16602091820152908252600192909201910161069d565b50505050815260200160018201805480602002602001604051908101604052809291908181526020015f905b8282101561084c575f848152602090206040805160808101909152600484029091018054829060ff16600681111561076b5761076b611fe1565b600681111561077c5761077c611fe1565b815260018201546020820152600282015473ffffffffffffffffffffffffffffffffffffffff1660408201526003820180546060909201916107bd9061277c565b80601f01602080910402602001604051908101604052809291908181526020018280546107e99061277c565b80156108345780601f1061080b57610100808354040283529160200191610834565b820191905f5260205f20905b81548152906001019060200180831161081757829003601f168201915b50505050508152505081526020019060010190610731565b50505050815260200160028201805480602002602001604051908101604052809291908181526020015f905b82821015610477575f8481526020902060408051606081019091529083018054829060ff1660028111156108ae576108ae611fe1565b60028111156108bf576108bf611fe1565b8152905460ff6101008204811660208085019190915262010000909204166040909201919091529082526001929092019101610878565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef5200054640100000000900460ff16610959576040517f77a399b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610962816114d5565b50565b61098960405180606001604052806060815260200160608152602001606081525090565b61063d8383611560565b5f5f5b838110156109de578260015f8787858181106109b4576109b4612f52565b9050602002013581526020019081526020015f2081816109d49190613353565b5050600101610996565b506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003260601b1660208201524360348201525f90605401604051602081830303815290604052805190602001209050610a3d86338388886116cd565b95945050505050565b5f805b83811015610a9057825f5f878785818110610a6657610a66612f52565b9050602002013581526020019081526020015f208181610a869190612e88565b5050600101610a49565b506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003260601b1660208201524360348201525f90605401604051602081830303815290604052805190602001209050610aef33308388886116cd565b949350505050565b5f805b83811015610a90578260015f878785818110610b1857610b18612f52565b9050602002013581526020019081526020015f208181610b389190613353565b5050600101610afa565b7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e005473ffffffffffffffffffffffffffffffffffffffff163314610ba957610ba97fb2395d7000000000000000000000000000000000000000000000000000000000611743565b3068929eee149b4bd212685403610bc75763ab143c065f526004601cfd5b3068929eee149b4bd21268556105b483838361174b565b5f805b83811015610c29578260015f878785818110610bff57610bff612f52565b9050602002013581526020019081526020015f208181610c1f9190613353565b5050600101610be1565b506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003260601b1660208201524360348201525f90605401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090505f5b84811015610cd157610cc9338330898986818110610cbd57610cbd612f52565b9050602002013561108d565b600101610c9d565b50949350505050565b5f8381527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040902080547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e009190610100900473ffffffffffffffffffffffffffffffffffffffff161580610d545750805460ff16155b15610d8b576040517ff5ab487200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260028201602052604090205460ff1615610dd5576040517f7912b73900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8481526001820160205260408120805482918291825b81811015610f5f575f838281548110610e0757610e07612f52565b5f91825260209091200180549091503373ffffffffffffffffffffffffffffffffffffffff90911603610ef4575f815474010000000000000000000000000000000000000000900460ff166002811115610e6357610e63611fe1565b14610e9a576040517f47592a4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80548a9082907fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000836002811115610eea57610eea611fe1565b0217905550600196505b805474010000000000000000000000000000000000000000900460ff166001816002811115610f2557610f25611fe1565b03610f3557866001019650610f55565b6002816002811115610f4957610f49611fe1565b03610f55578560010195505b5050600101610dec565b5084610f97576040517f8223a7e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fa26002826133fa565b841180610fb85750610fb56002826133fa565b83115b15611081575f898152600287016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055838511611003576002611006565b60015b90505f6110128c611814565b9050600182600281111561102857611028611fe1565b14806110315750805b1561106f578b7fb9d6ce397e562841871d119aaf77469c60a3b5bf8b99a5d9851656015015c633836040516110669190613432565b60405180910390a25b801561107e5761107e8c6118d1565b50505b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84166110d1576110d17f99ef038800000000000000000000000000000000000000000000000000000000611743565b5f8381527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040902080547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e00919060ff161561119a5760048101545f5b81811015611197578483600401828154811061114f5761114f612f52565b905f5260205f2001540361118f576040517f0d5a9ef800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611131565b50505b815473ffffffffffffffffffffffffffffffffffffffff166111be576111be6119f3565b81546040517f4f845445000000000000000000000000000000000000000000000000000000008152600560048201525f9173ffffffffffffffffffffffffffffffffffffffff1690634f845445906024015f60405180830381865afa158015611229573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261126e9190810190613526565b825490915060ff166112f657815460038301805473ffffffffffffffffffffffffffffffffffffffff8089167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558816610100027fffffffffffffffffffffff0000000000000000000000000000000000000000009091161760011782555b600482018054600181810183555f928352602080842090920187905583518784529085019091526040822090915b828110156114415781604051806040016040528086848151811061134a5761134a612f52565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020015f600281111561137f5761137f611fe1565b905281546001810183555f9283526020928390208251910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff909316928317825593830151929390929183917fffffffffffffffffffffff00000000000000000000000000000000000000000016177401000000000000000000000000000000000000000083600281111561142f5761142f611fe1565b02179055505050806001019050611324565b5084546040517f541da4e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063541da4e59061149d908c908c908b9089906004016135bb565b5f604051808303815f87803b1580156114b4575f5ffd5b505af11580156114c6573d5f5f3e3d5ffd5b50505050505050505050505050565b6114fe7fd5fa71fa00000000000000000000000000000000000000000000000000000000611b2e565b7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905550565b61158460405180606001604052806060815260200160608152602001606081525090565b5f8381527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040902080547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e00919060ff1661160e576040517ff5ab487200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038101546040517f069a3ee90000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff90911690819063069a3ee9906024015f60405180830381865afa15801561167e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116c39190810190613797565b9695505050505050565b5f805b8281101561173a578161170c57611703878787308888878181106116f6576116f6612f52565b9050602002013534611c83565b60019150611732565b6117328787873088888781811061172557611725612f52565b905060200201355f611c83565b6001016116d0565b50505050505050565b805f5260045ffd5b5f8381527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040902080547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e00919060ff166117cc576117cc7ff5ab487200000000000000000000000000000000000000000000000000000000611743565b847fb9d6ce397e562841871d119aaf77469c60a3b5bf8b99a5d9851656015015c633846040516117fc9190613432565b60405180910390a261180d856118d1565b5050505050565b5f8181527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040812060048101547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e009190835b818110156118c157826002015f84600401838154811061188c5761188c612f52565b5f918252602080832090910154835282019290925260400190205460ff166118b957505f95945050505050565b60010161186a565b50600195945050505050565b5050565b5f8181527f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e016020526040812060048101547f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e00925b8181101561197057826001015f84600401838154811061194757611947612f52565b905f5260205f20015481526020019081526020015f205f6119689190611f45565b600101611925565b5061197e600483015f611f60565b5f848152600184016020526040812080547fffffffffffffffffffffff0000000000000000000000000000000000000000001681556003810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055906119eb6004830182611f60565b505050505050565b5f7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e0090505f7fc21004fcc619240a31f006438274d15cd813308303284436eef6055f0fdcb600600601546040517f44ab66800000000000000000000000000000000000000000000000000000000081527f53706163654f70657261746f7200000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff909116906344ab668090602401602060405180830381865afa158015611ac6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aea91906138eb565b82547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff919091161790915550565b7fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b00602052604090205460ff16611c02577fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b006020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c34565b6040517ff2cfeefa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffff000000000000000000000000000000000000000000000000000000008216907f78f84e5b1c5c05be2b5ad3800781dd404d6d6c6302bc755c0fe20f58a33a7f22905f90a250565b611c8e868483611d73565b5f7f9075c515a635ba70c9696f31149324218d75cf00afe836c482e6473f38b19e005f8681526001828101602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117815560030180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055905080546040805173ffffffffffffffffffffffffffffffffffffffff898116602083015261173a9316918a9189918891889101604051602081830303815290604052611e31565b34811115611da457611da47ff4e95a4100000000000000000000000000000000000000000000000000000000611743565b73ffffffffffffffffffffffffffffffffffffffff8316611de857611de87f99ef038800000000000000000000000000000000000000000000000000000000611743565b73ffffffffffffffffffffffffffffffffffffffff8216611e2c57611e2c7f4bb7c20500000000000000000000000000000000000000000000000000000000611743565b505050565b8115611ec4576040517f21be050a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906321be050a908490611e91908990899089908890600401613906565b5f604051808303818588803b158015611ea8575f5ffd5b505af1158015611eba573d5f5f3e3d5ffd5b50505050506119eb565b6040517f21be050a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906321be050a90611f1c908890889088908790600401613906565b5f604051808303815f87803b158015611f33575f5ffd5b505af1158015611081573d5f5f3e3d5ffd5b5080545f8255905f5260205f20908101906109629190611f7b565b5080545f8255905f5260205f20908101906109629190611fb6565b5b80821115611fb25780547fffffffffffffffffffffff000000000000000000000000000000000000000000168155600101611f7c565b5090565b5b80821115611fb2575f8155600101611fb7565b5f60208284031215611fda575f5ffd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061096257610962611fe1565b5f8151808452602084019350602083015f5b8281101561206757815180516120458161200e565b875260209081015160ff16818801526040909601959190910190600101612030565b5093949350505050565b6007811061208157612081611fe1565b9052565b5f8151808452602084019350602083015f5b8281101561206757815180516120ac8161200e565b8088525060ff602082015116602088015260ff604082015116604088015250606086019550602082019150600181019050612097565b602081525f8251606060208401526120fd608084018261201e565b6020858101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403016040870152805180845290820193505f92909101905b8083101561219f578351612153838251612071565b6020810151602084015273ffffffffffffffffffffffffffffffffffffffff6040820151166040840152606081015160608401525060808201915060208401935060018301925061213e565b50604086015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08582030160608601526116c38184612085565b5f5f604083850312156121ec575f5ffd5b50508035926020909101359150565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f82516040602084015261226260608401826121fb565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152610a3d82826121fb565b60038110610962575f5ffd5b5f5f5f606084860312156122bb575f5ffd5b833592506020840135915060408401356122d48161229d565b809150509250925092565b5f606082840312156122ef575f5ffd5b50919050565b5f5f60408385031215612306575f5ffd5b82359150602083013567ffffffffffffffff811115612323575f5ffd5b61232f858286016122df565b9150509250929050565b602081525f825160606020840152612354608084018261201e565b6020858101518583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040870152805180845292935081019181840191600582901b8501015f5b82811015612434577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086830301845284516123d9838251612071565b6020810151602084015273ffffffffffffffffffffffffffffffffffffffff6040820151166040840152606081015190506080606084015261241e60808401826121fb565b602096870196959095019492505060010161239d565b50604088015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08782030160608801526124708186612085565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610962575f5ffd5b5f602082840312156124ad575f5ffd5b813561063d8161247c565b5f5f83601f8401126124c8575f5ffd5b50813567ffffffffffffffff8111156124df575f5ffd5b6020830191508360208260051b85010111156124f9575f5ffd5b9250929050565b5f5f5f5f60608587031215612513575f5ffd5b843561251e8161247c565b9350602085013567ffffffffffffffff811115612539575f5ffd5b612545878288016124b8565b909450925050604085013567ffffffffffffffff811115612564575f5ffd5b612570878288016122df565b91505092959194509250565b5f5f5f6040848603121561258e575f5ffd5b833567ffffffffffffffff8111156125a4575f5ffd5b6125b0868287016124b8565b909450925050602084013567ffffffffffffffff8111156125cf575f5ffd5b6125db868287016122df565b9150509250925092565b5f8154808452602084019350825f5260205f205f5b8281101561206757815460ff81166126118161200e565b875260081c60ff166020870152604090950194600191820191016125fa565b5f8154808452602084019350825f5260205f205f5b8281101561206757815460ff811661265c8161200e565b875260ff600882901c8116602089015260109190911c16604087015260609095019460019182019101612645565b60208152606060208201525f6126a360808301846125e5565b8281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160408401526001840180548083525f91825260208083209301905b80831015612744576126f98260ff865416612071565b6001840154602083015273ffffffffffffffffffffffffffffffffffffffff6002850154166040830152600384015460608301526080820191506004840193506001830192506126e3565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08582030160608601526116c38160028801612630565b600181811c9082168061279057607f821691505b6020821081036122ef577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b60208152606060208201525f6127e060808301846125e5565b600184017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015281815480845260208401915060208160051b850101835f5260205f2093505f5b82811015612951577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086830301845261286b8260ff875416612071565b6001850154602083015273ffffffffffffffffffffffffffffffffffffffff600286015416604083015260038501608060608401525f81546128ac8161277c565b806080870152600182165f81146128ca576001811461290457612935565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a088015260a082151560051b8801019350612935565b845f5260205f205f5b8381101561292c57815489820160a0015260019091019060200161290d565b880160a0019450505b505050600496909601956020959095019492505060010161282e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08782030160608801526124708160028a01612630565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129bc575f5ffd5b83018035915067ffffffffffffffff8211156129d6575f5ffd5b6020019150600681901b36038213156124f9575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600281901b7f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168214612a75577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919050565b60ff81168114610962575f5ffd5b8135612a938161229d565b612a9c8161200e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff82168117835550506020820135612ad881612a7a565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16600882901b61ff0016178255505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b40575f5ffd5b83018035915067ffffffffffffffff821115612b5a575f5ffd5b6020019150600781901b36038213156124f9575f5ffd5b60078110610962575f5ffd5b60078210612b8d57612b8d611fe1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831681178255505050565b8135612bc981612b71565b612bd38183612b7d565b50602082013560018201556040820135612bec8161247c565b6002820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555060609190910135600390910155565b68010000000000000000831115612c5757612c576129ed565b805483825580841015612cae57612c6d81612a1a565b612c7685612a1a565b5f8481526020902091820191015b81811015612cab575f80825560018201819055600282018190556003820155600401612c84565b50505b505f8181526020812083915b858110156119eb57612ccc8383612bbe565b6080929092019160049190910190600101612cba565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612d15575f5ffd5b83018035915067ffffffffffffffff821115612d2f575f5ffd5b60200191506060810236038213156124f9575f5ffd5b8135612d508161229d565b612d598161200e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff82168117835550506020820135612d9581612a7a565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16600882901b61ff0016178255506040820135612dd481612a7a565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1660109190911b62ff00001617905550565b68010000000000000000831115612e2257612e226129ed565b805483825580841015612e57575f828152602090208481019082015b80821015612e54575f8255600182019150612e3e565b50505b505f8181526020812083915b858110156119eb57612e758383612d45565b6060929092019160019182019101612e63565b612e928283612989565b68010000000000000000811115612eab57612eab6129ed565b825481845580821015612ee0575f848152602090208281019082015b80821015612edd575f8255600182019150612ec7565b50505b505f838152602090205f5b82811015612f1057612efd8483612a88565b6040939093019260019182019101612eeb565b50505050612f216020830183612b0d565b612f2f818360018601612c3e565b5050612f3e6040830183612ce2565b612f4c818360028601612e09565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffff