{
  "_format": "hh-sol-artifact-1",
  "contractName": "AllocateLimitHandler",
  "sourceName": "contracts/V3/handler/AllocateLimitHandler.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "claimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "getClaimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "areaNameList",
          "type": "string[]"
        }
      ],
      "name": "getEngineAreaList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIOBranches",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8[]",
              "name": "inBranch",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[]",
              "name": "outBranch",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IHandler.IOBranch[]",
          "name": "branches",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getInputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getOutputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regRule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleConfig",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotTimes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506156ea80620000216000396000f3fe608060405234801561001057600080fd5b506004361061012d5760003560e01c8063715018a6116100b3578063715018a6146102625780638129fc1c1461026a5780638da5cb5b1461027257806395edcb081461028d578063a903620c146102ad578063af84b51f146102c0578063b41bd789146102e0578063b4b70352146102f3578063d0d35b5514610306578063f2fde38b14610319578063f2fe4fa51461032c578063f96f58271461033b57600080fd5b80631cc4f041146101325780631eda6e4f1461015a57806334c76b251461017a578063394a7398146101ac5780634968d94f146101bf5780634b2dbcb8146101ed5780634b2e9b411461020d57806354fd4d50146102205780635790c2941461022757806362329cc51461023c5780636dabaf041461024f575b600080fd5b610145610140366004613989565b61037c565b60405190151581526020015b60405180910390f35b61016d610168366004613ace565b61045c565b6040516101519190613b87565b60408051808201909152600d81526c105b1b1bd8d85d19531a5b5a5d609a1b60208201525b6040516101519190613c33565b61019f6101ba366004613c46565b6104f2565b6101df6101cd366004613c46565b606a6020526000908152604090205481565b604051908152602001610151565b6102006101fb366004613c5f565b61058c565b6040516101519190613ce6565b61020061021b366004613c5f565b61062e565b60016101df565b61023a610235366004613d33565b6106ce565b005b61020061024a366004613dc6565b6107dc565b61014561025d366004613e76565b6108b9565b61023a610ac3565b61023a610ad7565b6033546040516001600160a01b039091168152602001610151565b6102a061029b36600461410d565b610be8565b60405161015191906142dd565b61023a6102bb366004614a3a565b610fda565b6102d36102ce366004614bed565b611057565b6040516101519190614d0a565b61023a6102ee366004614d6c565b611326565b610145610301366004613989565b611434565b61019f610314366004614da0565b611610565b61023a610327366004614de7565b6116ee565b60606040516101519190614e42565b610364610349366004613c46565b6068602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b6000806103aa836000015184602001518560600151866040015187608001518860a001518960e00151611764565b6000818152606b602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561040957602002820191906000526020600020905b8154815260200190600101908083116103f5575b505050505081525050905060008060ff168560c0015160ff161415610440576101208501516104399083906117d3565b9050610454565b610120850151610451908390611868565b90505b949350505050565b604080516020810190915260608152600061047c8a898989898e89611764565b6000818152606b602090815260409182902082518154808402820185018552928101838152949550939092849284918401828280156104da57602002820191906000526020600020905b8154815260200190600101908083116104c6575b50505050508152505091505098975050505050505050565b6069602052600090815260409020805461050b90614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461053790614ec7565b80156105845780601f1061055957610100808354040283529160200191610584565b820191906000526020600020905b81548152906001019060200180831161056757829003601f168201915b505050505081565b606060008787878787876040516020016105ab96959493929190614efc565b60408051601f1981840301815282825280516020918201206000818152606d8352839020805480840286018401909452838552909450919083018282801561061c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105fe575b50505050509150509695505050505050565b6060600087878787878760405160200161064d96959493929190614efc565b60408051601f1981840301815282825280516020918201206000818152606c8352839020805480840286018401909452838552909450919083018282801561061c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105fe5750505050509150509695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506066816040516107069190614f3f565b90815260405190819003602001902054336001600160a01b03909116146107485760405162461bcd60e51b815260040161073f90614f5b565b60405180910390fd5b6000338686866040516020016107619493929190614f92565b60408051601f19818403018152918152815160209283012060008181526069845291909120855191935061079a9290919086019061364b565b506107ba6040518060600160405280603281526020016156516032913950565b6107c58360006118df565b6000918252606a6020526040909120555050505050565b6060600082516001600160401b038111156107f9576107f96137e7565b604051908082528060200260200182016040528015610822578160200160208202803683370190505b50905060005b81518110156108b257606684828151811061084557610845614fc5565b602002602001015160405161085a9190614f3f565b9081526040519081900360200190205482516001600160a01b039091169083908390811061088a5761088a614fc5565b6001600160a01b03909216602092830291909101909101526108ab81614ff1565b9050610828565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506066816040516108fa9190614f3f565b90815260405190819003602001902054336001600160a01b03909116146109335760405162461bcd60e51b815260040161073f90614f5b565b60ff84161580610946575060ff84166001145b15610ab65760006109588460006118df565b905060006109678560016118df565b905060666040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516109a09190614f3f565b908152604051908190036020018120546331048c1760e11b825263ffffffff8b16600483015261ffff8a811660248401528916604483015260ff831660648301526001600160a01b031690636209182e90608401600060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506000338a8a8a604051602001610a3f949392919061500c565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b031690610a8590829060ff87169060089061193c565b60009283526068602052604090922080546001600160801b0319166001600160801b03909316929092179091555050505b5060019695505050505050565b610acb611961565b610ad560006119bb565b565b600054610100900460ff1615808015610af75750600054600160ff909116105b80610b115750303b158015610b11575060005460ff166001145b610b745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161073f565b6000805460ff191660011790558015610b97576000805461ff0019166101001790555b610b9f611a0d565b8015610be5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610bf06136cf565b60405180604001604052806006815260200165456e67696e6560d01b815250606681604051610c1f9190614f3f565b90815260405190819003602001902054336001600160a01b0390911614610c585760405162461bcd60e51b815260040161073f90614f5b565b610c60611a3c565b308352608084015160ff16610c8057610c798484611a52565b9250610fd2565b608084015160ff1660011415610fd2576000610c9f8560600151611a5a565b9050805160001480610cb2575080516001145b15610e1757604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606691610cea91614f3f565b90815260405160209181900382019020546060870151918201516101008301516001600160a01b039092169263063738cb9290610d2690611a66565b610d338a60600151611a85565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610d6a979695949392919060040161503f565b602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc919061508b565b15610dcd57600a6020850152610e0e565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b839250506108b2565b6060850151600090610e3390610e2e908484611aaa565b611af7565b905060ff8116600a1415610fa257604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606691610e7491614f3f565b90815260405160209181900382019020546060880151918201516101008301516001600160a01b039092169263063738cb9290610eb090611a66565b610ebd8b60600151611a85565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610ef4979695949392919060040161503f565b602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f46919061508b565b15610f5757600a6020860152610f98565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b84935050506108b2565b60ff81161580610fb5575060ff81166064145b15610fcf57610fc5868683611b44565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506066816040516110199190614f3f565b90815260405190819003602001902054336001600160a01b03909116146110525760405162461bcd60e51b815260040161073f90614f5b565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d091906150ad565b6040808501516060860151608087015192516110f094939060200161500c565b60408051601f198184030181528282528051602091820120600081815260688352838120548884015163050938c360e21b875294519296506001600160801b03169490936001600160a01b031692631424e30c92600480840193829003018186803b15801561115e57600080fd5b505afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119691906150ad565b604080870151608088015160a089015192516111b6949390602001614f92565b60405160208183030381529060405280519060200120905060006069600083815260200190815260200160002080546111ee90614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461121a90614ec7565b80156112675780601f1061123c57610100808354040283529160200191611267565b820191906000526020600020905b81548152906001019060200180831161124a57829003601f168201915b5050505050905073__$7fae9ec5e86ca3249a92f841eec9c6eb1c$__63206d9d408785606a6000878152602001908152602001600020546112a98660006118df565b6040518563ffffffff1660e01b81526004016112c894939291906150ca565b60006040518083038186803b1580156112e057600080fd5b505af41580156112f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261131c919081019061520c565b9695505050505050565b61132e611961565b60005b81518110156114305781818151811061134c5761134c614fc5565b6020026020010151606683838151811061136857611368614fc5565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e491908101906152c4565b6040516113f19190614f3f565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561142981614ff1565b9050611331565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b8152506066816040516114659190614f3f565b90815260405190819003602001902054336001600160a01b039091161461149e5760405162461bcd60e51b815260040161073f90614f5b565b60006114c73385602001518660600151876040015188608001518960a001518a60e00151611764565b6000818152606b6020526040812060c08701519293509160ff1661155b57610120860151604080518454602081810283018401845282018181526115549493879284929184919084018282801561153d57602002820191906000526020600020905b815481526020019060010190808311611529575b5050505050815250506117d390919063ffffffff16565b90506115cd565b610120860151604080518454602081810283018401845282018181526115ca949387928492918491908401828280156115b357602002820191906000526020600020905b81548152602001906001019080831161159f575b50505050508152505061186890919063ffffffff16565b90505b806116055760c086015160ff166115f4576101208601516115ef908390611d1d565b611605565b610120860151611605908390611dcd565b935050505b50919050565b606060003385858560405160200161162b9493929190614f92565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020805461166390614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461168f90614ec7565b80156116dc5780601f106116b1576101008083540402835291602001916116dc565b820191906000526020600020905b8154815290600101906020018083116116bf57829003601f168201915b509396505050505050505b9392505050565b6116f6611961565b6001600160a01b03811661175b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161073f565b610be5816119bb565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061185c83600001516000815181106117ef576117ef614fc5565b602002602001015160018460006008611808919061530c565b61181390600461530c565b61181e90600861530c565b61182990600461530c565b61183490601061530c565b61183f90601861530c565b61184a90602061530c565b611854919061530c565b60ff16611e45565b60011490505b92915050565b600061185c836000015160008151811061188457611884614fc5565b60200260200101516001846000600861189d919061530c565b6118a890600461530c565b6118b390600861530c565b6118be90600461530c565b6118c990601061530c565b6118d490601861530c565b61183f90602061530c565b6000806118f36118ee85611e64565b611e8a565b905061045461191d828560ff168151811061191057611910614fc5565b6020026020010151611e8a565b60028151811061192f5761192f614fc5565b6020026020010151611af7565b600083821b8183611950600180881b615331565b901b19969096161795945050505050565b6033546001600160a01b03163314610ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161073f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611a345760405162461bcd60e51b815260040161073f90615348565b610ad5611f93565b606554611a4c576301312d006065555b5a606555565b61160a6136cf565b60606118628230611fc3565b60006118628260a00151601060006008611a809190615393565b611e45565b60006118628260a00151601060006008611a9f9190615393565b611a80906010615393565b611ab26136f5565b611ad483611ac184600161530c565b60ff168151811061191057611910614fc5565b600281518110611ae657611ae6614fc5565b602002602001015190509392505050565b805160009015801590611b0c57508151602110155b611b1557600080fd5b600080611b2184612076565b8151919350915060208210156104545760208290036101000a9004949350505050565b611b4c6136cf565b611b6b6040518060600160405280603281526020016155ed6032913950565b6000611b7785846120bd565b9050611b986040518060600160405280603281526020016155896032913950565b6000611ba486836124dd565b905060005b81518161ffff161015611d1257611bd560405180606001604052806032815260200161561f6032913950565b6000611bdf612b04565b9050828261ffff1681518110611bf757611bf7614fc5565b602090810291909101015160ff1660408201526060880151611c1890612b4b565b60ff168152600160208201528351849061ffff8416908110611c3c57611c3c614fc5565b60200260200101518160c0018181525050611c5a8860600151612b70565b63ffffffff1660a0820152604080516020810190915260608152611c7e8183612bab565b6000611cb0338b60600151602001518c6060015161010001518d602001518e6060015160c001518f600001518a611764565b6000818152606b602090815260409091208451805193945085939192611cdb9284929091019061370f565b50905050611cfe6040518060600160405280603281526020016156836032913950565b50505080611d0b906153ab565b9050611ba9565b509395945050505050565b611da782600001600081548110611d3657611d36614fc5565b90600052602060002001546001808460006008611d53919061530c565b611d5e90600461530c565b611d6990600861530c565b611d7490600461530c565b611d7f90601061530c565b611d8a90601861530c565b611d9590602061530c565b611d9f919061530c565b60ff1661193c565b82600001600081548110611dbd57611dbd614fc5565b6000918252602090912001555050565b611da782600001600081548110611de657611de6614fc5565b90600052602060002001546001808460006008611e03919061530c565b611e0e90600461530c565b611e1990600861530c565b611e2490600461530c565b611e2f90601061530c565b611e3a90601861530c565b611d8a90602061530c565b91821c91600080611e59600180861b615331565b909416949350505050565b611e6c6136f5565b50604080518082019091528151815260209182019181019190915290565b6060611e958261313c565b611e9e57600080fd5b6000611ea983613175565b90506000816001600160401b03811115611ec557611ec56137e7565b604051908082528060200260200182016040528015611efe57816020015b611eeb6136f5565b815260200190600190039081611ee35790505b5090506000611f1085602001516131f8565b8560200151611f1f9190615393565b90506000805b84811015611f8857611f3683613273565b9150604051806040016040528083815260200184815250848281518110611f5f57611f5f614fc5565b6020908102919091010152611f748284615393565b925080611f8081614ff1565b915050611f25565b509195945050505050565b600054610100900460ff16611fba5760405162461bcd60e51b815260040161073f90615348565b610ad5336119bb565b60606000611fd86118ee856101600151611e64565b905060005b815181101561206b57600061201f61200084848151811061191057611910614fc5565b60008151811061201257612012614fc5565b6020026020010151613317565b9050846001600160a01b0316816001600160a01b0316141561205a5761205083838151811061191057611910614fc5565b9350505050611862565b5061206481614ff1565b9050611fdd565b506060949350505050565b600080600061208884602001516131f8565b9050600081856020015161209c9190615393565b905060008286600001516120b09190615331565b9196919550909350505050565b606060006120ce8460600151613331565b60ff166001600160401b038111156120e8576120e86137e7565b604051908082528060200260200182016040528015612111578160200160208202803683370190505b50905060005b6121248560600151613331565b60ff168110156124d557600182828151811061214257612142614fc5565b602090810291909101015260ff84166064141561227b5760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561219c57600080fd5b505afa1580156121b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d491906150ad565b6060870151610100810151906121e990611a66565b6121f68960600151611a85565b604051602001612209949392919061500c565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b03169061224882600883611e45565b905060ff81166001141561227757600085858151811061226a5761226a614fc5565b6020026020010181815250505b5050505b600082828151811061228f5761228f614fc5565b602002602001015111156124c557600060666040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516122d69190614f3f565b908152604051908190036020019020546001600160a01b03166352456227836001600160401b0381111561230c5761230c6137e7565b6040519080825280601f01601f191660200182016040528015612336576020820181803683370190505b5060608901516020810151610100820151909161235290611a66565b61235f8c60600151611a85565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b1681526123979897969594939291906004016153cd565b602060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e99190615435565b905060018114156124485760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b606482015260840161073f565b60028114156124995760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f7420726561636800604482015260640161073f565b6124a56127108261544e565b8383815181106124b7576124b7614fc5565b602002602001018181525050505b6124ce81614ff1565b9050612117565b509392505050565b6060600083606001519050600081602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252757600080fd5b505afa15801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255f91906150ad565b6001600160a01b03166305cce54f83610100015161257c85611a85565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b1580156125c257600080fd5b505afa1580156125d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125fe9190810190615470565b905061261f6040518060600160405280603281526020016155bb6032913950565b60008082516001600160401b0381111561263b5761263b6137e7565b604051908082528060200260200182016040528015612664578160200160208202803683370190505b509050600083516001600160401b03811115612682576126826137e7565b6040519080825280602002602001820160405280156126ab578160200160208202803683370190505b5090506000805b855181101561282d57600087602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156126fa57600080fd5b505afa15801561270e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273291906150ad565b8861010001516127418a611a85565b89858151811061275357612753614fc5565b602002602001015160405160200161276e9493929190614f92565b60408051601f1981840301815291815281516020928301206000818152606a909352912054909150806127a257505061281d565b8783815181106127b4576127b4614fc5565b60200260200101518688815181106127ce576127ce614fc5565b602002602001019060ff16908160ff1681525050808588815181106127f5576127f5614fc5565b60209081029190910101528661280a81614ff1565b975061281890508185615393565b935050505b61282681614ff1565b90506126b2565b5061283786613331565b60ff168110156128a45760405162461bcd60e51b815260206004820152603260248201527f416c6c6f636174654c696d697448616e646c65723a206e6f20656e6f75676820604482015271617661696c61626c65206272616e6368657360701b606482015260840161073f565b60006128af87613331565b60ff166001600160401b038111156128c9576128c96137e7565b6040519080825280602002602001820160405280156128f2578160200160208202803683370190505b50905060005b61290188613331565b60ff16811015612af657600080848c848151811061292157612921614fc5565b6020026020010151612933919061544e565b905060005b88811015612ae257828210158015612976575086818151811061295d5761295d614fc5565b6020026020010151836129709190615393565b92508282105b15612ad25786818151811061298d5761298d614fc5565b6020026020010180518091906129a290615509565b905250856129af81615509565b96505060008882815181106129c6576129c6614fc5565b60200260200101519050808686815181106129e3576129e3614fc5565b602002602001019060ff16908160ff168152505060008c602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3657600080fd5b505afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e91906150ad565b8d6101000151612a7d8f611a85565b84604051602001612a919493929190614f92565b60408051601f1981840301815291815281516020928301206000818152606a90935290822080549193509091612ac683615509565b91905055505050612ae2565b612adb81614ff1565b9050612938565b50505080612aef90614ff1565b90506128f8565b509998505050505050505050565b612b0c613749565b612b14613749565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60006118628260a00151600860006008612b659190615393565b611a9f906010615393565b60006118628260a00151602060006008612b8a9190615393565b612b95906010615393565b612ba0906010615393565b611a9f906008615393565b60c081015160019015612bc65780612bc281614ff1565b9150505b8160e0015161271014612be15780612bdd81614ff1565b9150505b81610100015161271014612bfd5780612bf981614ff1565b9150505b61014082015151151580612c1657506101608201515115155b80612c2657506101a08201515115155b15612c98576000826101600151518361014001515111612c6b57826101a00151518361016001515111612c5f57826101a0015151612c73565b82610160015151612c73565b826101400151515b9050612c80816004615520565b612c8a9083615393565b60ff90911661012084015290505b806001600160401b03811115612cb057612cb06137e7565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b5083528151612ce990849061336c565b612cf78383602001516133c4565b612d058383606001516133fd565b612d1383836040015161344c565b612d2283836101200151613490565b60008060019050836080015162ffffff1661271014612d5757612d49858560800151613521565b612d5460018361553f565b91505b8360a0015163ffffffff1661271014612d8657612d78858560a00151613588565b612d8360028361553f565b91505b60c084015115612dcc5760c0840151855182612da181614ff1565b935081518110612db357612db3614fc5565b6020908102919091010152612dc960048361553f565b91505b8360e0015161271014612e155760e0840151855182612dea81614ff1565b935081518110612dfc57612dfc614fc5565b6020908102919091010152612e1260088361553f565b91505b83610100015161271014612e6057610100840151855182612e3581614ff1565b935081518110612e4757612e47614fc5565b6020908102919091010152612e5d60108361553f565b91505b61012084015160ff161561312b5760005b84610120015160ff1681101561311c57600085610140015151118015612e9c57508461014001515181105b15612ef3578461014001518181518110612eb857612eb8614fc5565b602002602001015186600001518380612ed090614ff1565b945081518110612ee257612ee2614fc5565b602002602001018181525050612f21565b855160009083612f0281614ff1565b945081518110612f1457612f14614fc5565b6020026020010181815250505b600085610160015151118015612f3c57508461016001515181105b15612f93578461016001518181518110612f5857612f58614fc5565b602002602001015186600001518380612f7090614ff1565b945081518110612f8257612f82614fc5565b602002602001018181525050612fc1565b855160009083612fa281614ff1565b945081518110612fb457612fb4614fc5565b6020026020010181815250505b600085610180015151118015612fdc57508461018001515181105b15613036578461018001518181518110612ff857612ff8614fc5565b602002602001015160ff168660000151838061301390614ff1565b94508151811061302557613025614fc5565b602002602001018181525050613063565b855181908361304481614ff1565b94508151811061305657613056614fc5565b6020026020010181815250505b6000856101a001515111801561307e5750846101a001515181105b156130de57846101a00151818151811061309a5761309a614fc5565b60200260200101516001600160a01b0316866000015183806130bb90614ff1565b9450815181106130cd576130cd614fc5565b60200260200101818152505061310c565b8551600090836130ed81614ff1565b9450815181106130ff576130ff614fc5565b6020026020010181815250505b61311581614ff1565b9050612e71565b5061312860208361553f565b91505b61313585836135fb565b5050505050565b805160009061314d57506000919050565b6020820151805160001a9060c082101561316b575060009392505050565b5060019392505050565b805160009061318657506000919050565b60008061319684602001516131f8565b84602001516131a59190615393565b90506000846000015185602001516131bd9190615393565b90505b808210156131ef576131d182613273565b6131db9083615393565b9150826131e781614ff1565b9350506131c0565b50909392505050565b8051600090811a60808110156132115750600092915050565b60b881108061322c575060c0811080159061322c575060f881105b1561323a5750600192915050565b60c08110156132675761324f600160b8615565565b61325c9060ff1682615331565b6116e7906001615393565b61324f600160f8615565565b80516000908190811a608081101561328e57600191506108b2565b60b88110156132b4576132a2608082615331565b6132ad906001615393565b91506108b2565b60c08110156132e15760b78103600185019450806020036101000a855104600182018101935050506108b2565b60f88110156132f5576132a260c082615331565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805160009060151461332857600080fd5b61186282611af7565b60006118628260a0015160106000600861334b9190615393565b613356906010615393565b613361906010615393565b611a80906008615393565b6133a1826000015160008151811061338657613386614fc5565b60200260200101518260ff16600860ff16600060ff1661193c565b825180516000906133b4576133b4614fc5565b6020026020010181815250505050565b6133a182600001516000815181106133de576133de614fc5565b60200260200101518260ff16600460ff1660006008611d9f919061530c565b6133a1826000015160008151811061341757613417614fc5565b60200260200101518260ff16600460ff1660006008613436919061530c565b61344190600461530c565b611d9f90600861530c565b6133a1826000015160008151811061346657613466614fc5565b60200260200101518260ff16600860ff1660006008613485919061530c565b611d9f90600461530c565b6133a182600001516000815181106134aa576134aa614fc5565b60200260200101518260ff16600860ff16600060086134c9919061530c565b6134d490600461530c565b6134df90600861530c565b6134ea90600461530c565b6134f590601061530c565b61350090601861530c565b61350b90602061530c565b61351690602061530c565b611d9f90602061530c565b6133a1826000015160008151811061353b5761353b614fc5565b60200260200101518262ffffff16601860ff166000600861355c919061530c565b61356790600461530c565b61357290600861530c565b61357d90600461530c565b611d9f90601061530c565b6133a182600001516000815181106135a2576135a2614fc5565b60200260200101518263ffffffff16602060ff16600060086135c4919061530c565b6135cf90600461530c565b6135da90600861530c565b6135e590600461530c565b6135f090601061530c565b611d9f90601861530c565b6133a1826000015160008151811061361557613615614fc5565b60200260200101518261ffff16601060ff1660006008613635919061530c565b61364090600461530c565b61348590600861530c565b82805461365790614ec7565b90600052602060002090601f01602090048101928261367957600085556136bf565b82601f1061369257805160ff19168380011785556136bf565b828001600101855582156136bf579182015b828111156136bf5782518255916020019190600101906136a4565b506136cb9291506137d2565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156136bf57916020028201828111156136bf5782518255916020019190600101906136a4565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156136cb57600081556001016137d3565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613820576138206137e7565b60405290565b60405160a081016001600160401b0381118282101715613820576138206137e7565b604080519081016001600160401b0381118282101715613820576138206137e7565b604051608081016001600160401b0381118282101715613820576138206137e7565b60405161018081016001600160401b0381118282101715613820576138206137e7565b604051606081016001600160401b0381118282101715613820576138206137e7565b60405161016081016001600160401b0381118282101715613820576138206137e7565b604051601f8201601f191681016001600160401b038111828210171561391c5761391c6137e7565b604052919050565b6001600160a01b0381168114610be557600080fd5b803561394481613924565b919050565b803563ffffffff8116811461394457600080fd5b60ff81168114610be557600080fd5b80356139448161395d565b803561ffff8116811461394457600080fd5b6000610140828403121561399c57600080fd5b6139a46137fd565b6139ad83613939565b81526139bb60208401613939565b60208201526139cc60408401613939565b60408201526139dd60608401613949565b60608201526139ee60808401613949565b60808201526139ff60a08401613939565b60a0820152613a1060c0840161396c565b60c0820152613a2160e08401613977565b60e0820152610100613a3481850161396c565b90820152610120613a4684820161396c565b908201529392505050565b60006001600160401b03821115613a6a57613a6a6137e7565b50601f01601f191660200190565b600082601f830112613a8957600080fd5b8135613a9c613a9782613a51565b6138f4565b818152846020838601011115613ab157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613aeb57600080fd5b8835613af681613924565b97506020890135613b0681613924565b96506040890135613b1681613924565b9550613b2460608a01613949565b94506080890135613b3481613924565b9350613b4260a08a01613949565b925060c08901356001600160401b03811115613b5d57600080fd5b613b698b828c01613a78565b925050613b7860e08a01613977565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613bcc5783518252928401926001929092019190840190613bac565b509695505050505050565b60005b83811015613bf2578181015183820152602001613bda565b83811115613c01576000848401525b50505050565b60008151808452613c1f816020860160208601613bd7565b601f01601f19169290920160200192915050565b6020815260006116e76020830184613c07565b600060208284031215613c5857600080fd5b5035919050565b60008060008060008060c08789031215613c7857600080fd5b8635613c8381613924565b95506020870135613c9381613924565b9450613ca160408801613949565b93506060870135613cb181613924565b9250613cbf60808801613949565b9150613ccd60a08801613977565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b81811015613d275783516001600160a01b031683529284019291840191600101613d02565b50909695505050505050565b60008060008060808587031215613d4957600080fd5b613d5285613949565b9350613d6060208601613977565b92506040850135613d708161395d565b915060608501356001600160401b03811115613d8b57600080fd5b613d9787828801613a78565b91505092959194509250565b60006001600160401b03821115613dbc57613dbc6137e7565b5060051b60200190565b60006020808385031215613dd957600080fd5b82356001600160401b0380821115613df057600080fd5b818501915085601f830112613e0457600080fd5b8135613e12613a9782613da3565b81815260059190911b83018401908481019088831115613e3157600080fd5b8585015b83811015613e6957803585811115613e4d5760008081fd5b613e5b8b89838a0101613a78565b845250918601918601613e35565b5098975050505050505050565b600080600080600060a08688031215613e8e57600080fd5b613e9786613949565b9450613ea560208701613977565b9350613eb360408701613977565b92506060860135613ec38161395d565b915060808601356001600160401b03811115613ede57600080fd5b613eea88828901613a78565b9150509295509295909350565b600082601f830112613f0857600080fd5b81356020613f18613a9783613da3565b82815260059290921b84018101918181019086841115613f3757600080fd5b8286015b84811015613bcc5780356001600160401b0380821115613f5a57600080fd5b9088019060a0828b03601f19011215613f7257600080fd5b613f7a613826565b86830135613f878161395d565b8152604083810135613f9881613924565b828901526060848101358284015260808501359083015260a084013583811115613fc25760008081fd5b8085019450508b603f850112613fda57600092508283fd5b878401359250613fec613a9784613da3565b83815260069390931b8401810192888101908d85111561400c5760008081fd5b948201945b848610156140635782868f0312156140295760008081fd5b614031613848565b61403a87613949565b81528a8701358060040b81146140505760008081fd5b818c015282529482019490890190614011565b6080840152505085525050918301918301613f3b565b60006080828403121561408b57600080fd5b61409361386a565b905081356140a081613924565b815260208201356140b08161395d565b602082015260408201356001600160401b03808211156140cf57600080fd5b6140db85838601613a78565b604084015260608401359150808211156140f457600080fd5b5061410184828501613a78565b60608301525092915050565b6000806040838503121561412057600080fd5b82356001600160401b038082111561413757600080fd5b9084019060a0828703121561414b57600080fd5b614153613826565b823561415e81613924565b8152602083013561416e81613924565b6020820152604083013561418181613924565b604082015260608301358281111561419857600080fd5b830161018081890312156141ab57600080fd5b6141b361388c565b6141bc82613939565b81526141ca60208301613939565b60208201526141db60408301613939565b60408201526141ec60608301613939565b60608201526080820135608082015260a082013560a082015261421160c08301613949565b60c082015261422260e08301613949565b60e0820152610100614235818401613949565b9082015261012061424783820161396c565b90820152610140828101358581111561425f57600080fd5b61426b8b828601613ef7565b828401525050610160808301358581111561428557600080fd5b6142918b828601613a78565b82840152505080606084015250506142ab6080840161396c565b6080820152935060208501359150808211156142c657600080fd5b506142d385828601614079565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261431860a0840182613c07565b90506060840151601f198483030160808501526143358282613c07565b95945050505050565b600082601f83011261434f57600080fd5b8135602061435f613a9783613da3565b82815260059290921b8401810191818101908684111561437e57600080fd5b8286015b84811015613bcc5780358352918301918301614382565b600082601f8301126143aa57600080fd5b813560206143ba613a9783613da3565b82815260059290921b840181019181810190868411156143d957600080fd5b8286015b84811015613bcc5780356143f081613924565b83529183019183016143dd565b600082601f83011261440e57600080fd5b8135602061441e613a9783613da3565b82815260059290921b8401810191818101908684111561443d57600080fd5b8286015b84811015613bcc5780356001600160401b038082111561446057600080fd5b90880190601f196080838c038201121561447957600080fd5b61448161386a565b878401358381111561449257600080fd5b84016060818e03840112156144a657600080fd5b6144ae6138af565b9250888101356144bd8161395d565b83526040818101356144ce81613924565b848b01526060820135858111156144e457600080fd5b6144f28f8c8386010161433e565b828601525083835261450581870161396c565b8a840152606086013593508484111561451d57600080fd5b61452b8e8b86890101614399565b9083015250608084013591508282111561454457600080fd5b6145528c898487010161433e565b60608201528652505050918301918301614441565b600082601f83011261457857600080fd5b81356020614588613a9783613da3565b82815260059290921b840181019181810190868411156145a757600080fd5b8286015b84811015613bcc5780356001600160401b038111156145ca5760008081fd5b6145d88986838b0101613a78565b8452509183019183016145ab565b600082601f8301126145f757600080fd5b81356020614607613a9783613da3565b82815260059290921b8401810191818101908684111561462657600080fd5b8286015b84811015613bcc5780356001600160401b038082111561464a5760008081fd5b9088019060a0828b03601f19018113156146645760008081fd5b61466c613826565b878401358381111561467e5760008081fd5b61468c8d8a838801016143fd565b825250604061469c81860161396c565b8983015260606146ad818701613939565b828401526080915081860135858111156146c75760008081fd5b6146d58f8c838a0101614399565b828501525050828501359250838311156146ef5760008081fd5b6146fd8d8a85880101614567565b90820152865250505091830191830161462a565b600082601f83011261472257600080fd5b81356020614732613a9783613da3565b82815260059290921b8401810191818101908684111561475157600080fd5b8286015b84811015613bcc5780356147688161395d565b8352918301918301614755565b80356001600160401b038116811461394457600080fd5b600082601f83011261479d57600080fd5b813560206147ad613a9783613da3565b82815260059290921b840181019181810190868411156147cc57600080fd5b8286015b84811015613bcc5780356001600160401b03808211156147f05760008081fd5b90880190610160828b03601f190181131561480b5760008081fd5b6148136138d1565b61481e888501613977565b8152604061482d818601613977565b89830152606061483e81870161396c565b8284015260809150614851828701613949565b9083015260a061486286820161396c565b8284015260c09150614875828701613949565b9083015260e0614886868201613949565b82840152610100915061489a828701614775565b9083015261012085810135858111156148b35760008081fd5b6148c18f8c838a0101614399565b8385015250610140915081860135858111156148dd5760008081fd5b6148eb8f8c838a0101614567565b8285015250506148fc838601613939565b9082015286525050509183019183016147d0565b600082601f83011261492157600080fd5b81356020614931613a9783613da3565b82815260059290921b8401810191818101908684111561495057600080fd5b8286015b84811015613bcc5780356001600160401b03808211156149745760008081fd5b9088019060a0828b03601f190181131561498e5760008081fd5b614996613826565b6149a1888501613949565b8152604080850135848111156149b75760008081fd5b6149c58e8b83890101613a78565b8a84015250606080860135858111156149de5760008081fd5b6149ec8f8c838a0101613a78565b8385015250608091508186013585811115614a075760008081fd5b614a158f8c838a0101613a78565b828501525050614a2683860161396c565b908201528652505050918301918301614954565b60008060408385031215614a4d57600080fd5b614a5683613949565b915060208301356001600160401b0380821115614a7257600080fd5b908401906101608287031215614a8757600080fd5b614a8f6138d1565b823582811115614a9e57600080fd5b614aaa888286016145e6565b825250602083013582811115614abf57600080fd5b614acb88828601614711565b602083015250604083013582811115614ae357600080fd5b614aef8882860161478c565b604083015250606083013582811115614b0757600080fd5b614b1388828601614910565b606083015250608083013582811115614b2b57600080fd5b614b3788828601614711565b60808301525060a083013582811115614b4f57600080fd5b614b5b88828601614399565b60a08301525060c083013582811115614b7357600080fd5b614b7f88828601614399565b60c083015250614b9160e08401613949565b60e0820152610100614ba4818501613949565b90820152610120614bb684820161396c565b908201526101408381013583811115614bce57600080fd5b614bda89828701613a78565b8284015250508093505050509250929050565b600060208284031215614bff57600080fd5b81356001600160401b0380821115614c1657600080fd5b908301906101608286031215614c2b57600080fd5b614c336138d1565b614c3c83613939565b8152614c4a60208401613939565b6020820152614c5b60408401613949565b6040820152614c6c60608401613977565b6060820152614c7d60808401613977565b6080820152614c8e60a0840161396c565b60a0820152614c9f60c08401613939565b60c0820152614cb060e08401613949565b60e0820152610100614cc3818501613939565b90820152610120614cd584820161396c565b908201526101408381013583811115614ced57600080fd5b614cf988828701613a78565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614d5f57603f19888603018452614d4d858351613c07565b94509285019290850190600101614d31565b5092979650505050505050565b600060208284031215614d7e57600080fd5b81356001600160401b03811115614d9457600080fd5b61045484828501614399565b600080600060608486031215614db557600080fd5b614dbe84613949565b9250614dcc60208501613977565b91506040840135614ddc8161395d565b809150509250925092565b600060208284031215614df957600080fd5b81356116e781613924565b600081518084526020808501945080840160005b83811015614e3757815160ff1687529582019590820190600101614e18565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614eb957888303603f1901855281518051878552614e8d88860182614e04565b91890151858303868b0152919050614ea58183614e04565b968901969450505090860190600101614e69565b509098975050505050505050565b600181811c90821680614edb57607f821691505b6020821081141561160a57634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b60008251614f51818460208701613bd7565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561500557615005614fdb565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b60006020828403121561509d57600080fd5b815180151581146116e757600080fd5b6000602082840312156150bf57600080fd5b81516116e781613924565b608081526150dc608082018651613cd9565b600060208601516150f060a0840182613cd9565b50604086015163ffffffff811660c084015250606086015161ffff811660e084015250608086015161010061512a8185018361ffff169052565b60a088015191506101206151428186018460ff169052565b60c0890151925061014061515881870185613cd9565b60e08a015193506101606151738188018663ffffffff169052565b838b01519450615187610180880186613cd9565b918a015160ff166101a08701528901516101c086019190915291506151b290506101e0840182613c07565b9150506151ca60208301866001600160801b03169052565b60408201939093526060015292915050565b60006151ea613a9784613a51565b90508281528383830111156151fe57600080fd5b6116e7836020830184613bd7565b6000602080838503121561521f57600080fd5b82516001600160401b038082111561523657600080fd5b818501915085601f83011261524a57600080fd5b8151615258613a9782613da3565b81815260059190911b8301840190848101908883111561527757600080fd5b8585015b83811015613e69578051858111156152935760008081fd5b8601603f81018b136152a55760008081fd5b6152b68b89830151604084016151dc565b84525091860191860161527b565b6000602082840312156152d657600080fd5b81516001600160401b038111156152ec57600080fd5b8201601f810184136152fd57600080fd5b610454848251602084016151dc565b600060ff821660ff84168060ff0382111561532957615329614fdb565b019392505050565b60008282101561534357615343614fdb565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082198211156153a6576153a6614fdb565b500190565b600061ffff808316818114156153c3576153c3614fdb565b6001019392505050565b60006101008083526153e18184018c613c07565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b60006020828403121561544757600080fd5b5051919050565b60008261546b57634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561548357600080fd5b82516001600160401b0381111561549957600080fd5b8301601f810185136154aa57600080fd5b80516154b8613a9782613da3565b81815260059190911b820183019083810190878311156154d757600080fd5b928401925b828410156154fe5783516154ef8161395d565b825292840192908401906154dc565b979650505050505050565b60008161551857615518614fdb565b506000190190565b600081600019048311821515161561553a5761553a614fdb565b500290565b600061ffff80831681851680830382111561555c5761555c614fdb565b01949350505050565b600060ff821660ff84168082101561557f5761557f614fdb565b9003939250505056fe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20312d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20322d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20302d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20372d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20342d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d2038a2646970667358221220e208e0b24519ee2845bde22929da1bd83d38fca1a610ea8e2c69eb673a32594364736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012d5760003560e01c8063715018a6116100b3578063715018a6146102625780638129fc1c1461026a5780638da5cb5b1461027257806395edcb081461028d578063a903620c146102ad578063af84b51f146102c0578063b41bd789146102e0578063b4b70352146102f3578063d0d35b5514610306578063f2fde38b14610319578063f2fe4fa51461032c578063f96f58271461033b57600080fd5b80631cc4f041146101325780631eda6e4f1461015a57806334c76b251461017a578063394a7398146101ac5780634968d94f146101bf5780634b2dbcb8146101ed5780634b2e9b411461020d57806354fd4d50146102205780635790c2941461022757806362329cc51461023c5780636dabaf041461024f575b600080fd5b610145610140366004613989565b61037c565b60405190151581526020015b60405180910390f35b61016d610168366004613ace565b61045c565b6040516101519190613b87565b60408051808201909152600d81526c105b1b1bd8d85d19531a5b5a5d609a1b60208201525b6040516101519190613c33565b61019f6101ba366004613c46565b6104f2565b6101df6101cd366004613c46565b606a6020526000908152604090205481565b604051908152602001610151565b6102006101fb366004613c5f565b61058c565b6040516101519190613ce6565b61020061021b366004613c5f565b61062e565b60016101df565b61023a610235366004613d33565b6106ce565b005b61020061024a366004613dc6565b6107dc565b61014561025d366004613e76565b6108b9565b61023a610ac3565b61023a610ad7565b6033546040516001600160a01b039091168152602001610151565b6102a061029b36600461410d565b610be8565b60405161015191906142dd565b61023a6102bb366004614a3a565b610fda565b6102d36102ce366004614bed565b611057565b6040516101519190614d0a565b61023a6102ee366004614d6c565b611326565b610145610301366004613989565b611434565b61019f610314366004614da0565b611610565b61023a610327366004614de7565b6116ee565b60606040516101519190614e42565b610364610349366004613c46565b6068602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b6000806103aa836000015184602001518560600151866040015187608001518860a001518960e00151611764565b6000818152606b602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561040957602002820191906000526020600020905b8154815260200190600101908083116103f5575b505050505081525050905060008060ff168560c0015160ff161415610440576101208501516104399083906117d3565b9050610454565b610120850151610451908390611868565b90505b949350505050565b604080516020810190915260608152600061047c8a898989898e89611764565b6000818152606b602090815260409182902082518154808402820185018552928101838152949550939092849284918401828280156104da57602002820191906000526020600020905b8154815260200190600101908083116104c6575b50505050508152505091505098975050505050505050565b6069602052600090815260409020805461050b90614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461053790614ec7565b80156105845780601f1061055957610100808354040283529160200191610584565b820191906000526020600020905b81548152906001019060200180831161056757829003601f168201915b505050505081565b606060008787878787876040516020016105ab96959493929190614efc565b60408051601f1981840301815282825280516020918201206000818152606d8352839020805480840286018401909452838552909450919083018282801561061c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105fe575b50505050509150509695505050505050565b6060600087878787878760405160200161064d96959493929190614efc565b60408051601f1981840301815282825280516020918201206000818152606c8352839020805480840286018401909452838552909450919083018282801561061c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105fe5750505050509150509695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506066816040516107069190614f3f565b90815260405190819003602001902054336001600160a01b03909116146107485760405162461bcd60e51b815260040161073f90614f5b565b60405180910390fd5b6000338686866040516020016107619493929190614f92565b60408051601f19818403018152918152815160209283012060008181526069845291909120855191935061079a9290919086019061364b565b506107ba6040518060600160405280603281526020016156516032913950565b6107c58360006118df565b6000918252606a6020526040909120555050505050565b6060600082516001600160401b038111156107f9576107f96137e7565b604051908082528060200260200182016040528015610822578160200160208202803683370190505b50905060005b81518110156108b257606684828151811061084557610845614fc5565b602002602001015160405161085a9190614f3f565b9081526040519081900360200190205482516001600160a01b039091169083908390811061088a5761088a614fc5565b6001600160a01b03909216602092830291909101909101526108ab81614ff1565b9050610828565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506066816040516108fa9190614f3f565b90815260405190819003602001902054336001600160a01b03909116146109335760405162461bcd60e51b815260040161073f90614f5b565b60ff84161580610946575060ff84166001145b15610ab65760006109588460006118df565b905060006109678560016118df565b905060666040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516109a09190614f3f565b908152604051908190036020018120546331048c1760e11b825263ffffffff8b16600483015261ffff8a811660248401528916604483015260ff831660648301526001600160a01b031690636209182e90608401600060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506000338a8a8a604051602001610a3f949392919061500c565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b031690610a8590829060ff87169060089061193c565b60009283526068602052604090922080546001600160801b0319166001600160801b03909316929092179091555050505b5060019695505050505050565b610acb611961565b610ad560006119bb565b565b600054610100900460ff1615808015610af75750600054600160ff909116105b80610b115750303b158015610b11575060005460ff166001145b610b745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161073f565b6000805460ff191660011790558015610b97576000805461ff0019166101001790555b610b9f611a0d565b8015610be5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b610bf06136cf565b60405180604001604052806006815260200165456e67696e6560d01b815250606681604051610c1f9190614f3f565b90815260405190819003602001902054336001600160a01b0390911614610c585760405162461bcd60e51b815260040161073f90614f5b565b610c60611a3c565b308352608084015160ff16610c8057610c798484611a52565b9250610fd2565b608084015160ff1660011415610fd2576000610c9f8560600151611a5a565b9050805160001480610cb2575080516001145b15610e1757604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606691610cea91614f3f565b90815260405160209181900382019020546060870151918201516101008301516001600160a01b039092169263063738cb9290610d2690611a66565b610d338a60600151611a85565b60208b015160608c015160c001518c516040516001600160e01b031960e08a901b168152610d6a979695949392919060040161503f565b602060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc919061508b565b15610dcd57600a6020850152610e0e565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918601526001908501525b839250506108b2565b6060850151600090610e3390610e2e908484611aaa565b611af7565b905060ff8116600a1415610fa257604080518082018252600f81526e2930b73237b6a3b2b732b930ba37b960891b60208201529051606691610e7491614f3f565b90815260405160209181900382019020546060880151918201516101008301516001600160a01b039092169263063738cb9290610eb090611a66565b610ebd8b60600151611a85565b60208c015160608d015160c001518d516040516001600160e01b031960e08a901b168152610ef4979695949392919060040161503f565b602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f46919061508b565b15610f5757600a6020860152610f98565b604080518082018252601c81527b6d616b652072616e646f6d20657863656564207374642074696d657360201b602080830191909152918701526001908601525b84935050506108b2565b60ff81161580610fb5575060ff81166064145b15610fcf57610fc5868683611b44565b6064602082015294505b50505b509092915050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506066816040516110199190614f3f565b90815260405190819003602001902054336001600160a01b03909116146110525760405162461bcd60e51b815260040161073f90614f5b565b505050565b6060600082602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d091906150ad565b6040808501516060860151608087015192516110f094939060200161500c565b60408051601f198184030181528282528051602091820120600081815260688352838120548884015163050938c360e21b875294519296506001600160801b03169490936001600160a01b031692631424e30c92600480840193829003018186803b15801561115e57600080fd5b505afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119691906150ad565b604080870151608088015160a089015192516111b6949390602001614f92565b60405160208183030381529060405280519060200120905060006069600083815260200190815260200160002080546111ee90614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461121a90614ec7565b80156112675780601f1061123c57610100808354040283529160200191611267565b820191906000526020600020905b81548152906001019060200180831161124a57829003601f168201915b5050505050905073__$7fae9ec5e86ca3249a92f841eec9c6eb1c$__63206d9d408785606a6000878152602001908152602001600020546112a98660006118df565b6040518563ffffffff1660e01b81526004016112c894939291906150ca565b60006040518083038186803b1580156112e057600080fd5b505af41580156112f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261131c919081019061520c565b9695505050505050565b61132e611961565b60005b81518110156114305781818151811061134c5761134c614fc5565b6020026020010151606683838151811061136857611368614fc5565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b815260040160006040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e491908101906152c4565b6040516113f19190614f3f565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561142981614ff1565b9050611331565b5050565b600060405180604001604052806006815260200165456e67696e6560d01b8152506066816040516114659190614f3f565b90815260405190819003602001902054336001600160a01b039091161461149e5760405162461bcd60e51b815260040161073f90614f5b565b60006114c73385602001518660600151876040015188608001518960a001518a60e00151611764565b6000818152606b6020526040812060c08701519293509160ff1661155b57610120860151604080518454602081810283018401845282018181526115549493879284929184919084018282801561153d57602002820191906000526020600020905b815481526020019060010190808311611529575b5050505050815250506117d390919063ffffffff16565b90506115cd565b610120860151604080518454602081810283018401845282018181526115ca949387928492918491908401828280156115b357602002820191906000526020600020905b81548152602001906001019080831161159f575b50505050508152505061186890919063ffffffff16565b90505b806116055760c086015160ff166115f4576101208601516115ef908390611d1d565b611605565b610120860151611605908390611dcd565b935050505b50919050565b606060003385858560405160200161162b9493929190614f92565b604051602081830303815290604052805190602001209050600060696000838152602001908152602001600020805461166390614ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461168f90614ec7565b80156116dc5780601f106116b1576101008083540402835291602001916116dc565b820191906000526020600020905b8154815290600101906020018083116116bf57829003601f168201915b509396505050505050505b9392505050565b6116f6611961565b6001600160a01b03811661175b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161073f565b610be5816119bb565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061185c83600001516000815181106117ef576117ef614fc5565b602002602001015160018460006008611808919061530c565b61181390600461530c565b61181e90600861530c565b61182990600461530c565b61183490601061530c565b61183f90601861530c565b61184a90602061530c565b611854919061530c565b60ff16611e45565b60011490505b92915050565b600061185c836000015160008151811061188457611884614fc5565b60200260200101516001846000600861189d919061530c565b6118a890600461530c565b6118b390600861530c565b6118be90600461530c565b6118c990601061530c565b6118d490601861530c565b61183f90602061530c565b6000806118f36118ee85611e64565b611e8a565b905061045461191d828560ff168151811061191057611910614fc5565b6020026020010151611e8a565b60028151811061192f5761192f614fc5565b6020026020010151611af7565b600083821b8183611950600180881b615331565b901b19969096161795945050505050565b6033546001600160a01b03163314610ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161073f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611a345760405162461bcd60e51b815260040161073f90615348565b610ad5611f93565b606554611a4c576301312d006065555b5a606555565b61160a6136cf565b60606118628230611fc3565b60006118628260a00151601060006008611a809190615393565b611e45565b60006118628260a00151601060006008611a9f9190615393565b611a80906010615393565b611ab26136f5565b611ad483611ac184600161530c565b60ff168151811061191057611910614fc5565b600281518110611ae657611ae6614fc5565b602002602001015190509392505050565b805160009015801590611b0c57508151602110155b611b1557600080fd5b600080611b2184612076565b8151919350915060208210156104545760208290036101000a9004949350505050565b611b4c6136cf565b611b6b6040518060600160405280603281526020016155ed6032913950565b6000611b7785846120bd565b9050611b986040518060600160405280603281526020016155896032913950565b6000611ba486836124dd565b905060005b81518161ffff161015611d1257611bd560405180606001604052806032815260200161561f6032913950565b6000611bdf612b04565b9050828261ffff1681518110611bf757611bf7614fc5565b602090810291909101015160ff1660408201526060880151611c1890612b4b565b60ff168152600160208201528351849061ffff8416908110611c3c57611c3c614fc5565b60200260200101518160c0018181525050611c5a8860600151612b70565b63ffffffff1660a0820152604080516020810190915260608152611c7e8183612bab565b6000611cb0338b60600151602001518c6060015161010001518d602001518e6060015160c001518f600001518a611764565b6000818152606b602090815260409091208451805193945085939192611cdb9284929091019061370f565b50905050611cfe6040518060600160405280603281526020016156836032913950565b50505080611d0b906153ab565b9050611ba9565b509395945050505050565b611da782600001600081548110611d3657611d36614fc5565b90600052602060002001546001808460006008611d53919061530c565b611d5e90600461530c565b611d6990600861530c565b611d7490600461530c565b611d7f90601061530c565b611d8a90601861530c565b611d9590602061530c565b611d9f919061530c565b60ff1661193c565b82600001600081548110611dbd57611dbd614fc5565b6000918252602090912001555050565b611da782600001600081548110611de657611de6614fc5565b90600052602060002001546001808460006008611e03919061530c565b611e0e90600461530c565b611e1990600861530c565b611e2490600461530c565b611e2f90601061530c565b611e3a90601861530c565b611d8a90602061530c565b91821c91600080611e59600180861b615331565b909416949350505050565b611e6c6136f5565b50604080518082019091528151815260209182019181019190915290565b6060611e958261313c565b611e9e57600080fd5b6000611ea983613175565b90506000816001600160401b03811115611ec557611ec56137e7565b604051908082528060200260200182016040528015611efe57816020015b611eeb6136f5565b815260200190600190039081611ee35790505b5090506000611f1085602001516131f8565b8560200151611f1f9190615393565b90506000805b84811015611f8857611f3683613273565b9150604051806040016040528083815260200184815250848281518110611f5f57611f5f614fc5565b6020908102919091010152611f748284615393565b925080611f8081614ff1565b915050611f25565b509195945050505050565b600054610100900460ff16611fba5760405162461bcd60e51b815260040161073f90615348565b610ad5336119bb565b60606000611fd86118ee856101600151611e64565b905060005b815181101561206b57600061201f61200084848151811061191057611910614fc5565b60008151811061201257612012614fc5565b6020026020010151613317565b9050846001600160a01b0316816001600160a01b0316141561205a5761205083838151811061191057611910614fc5565b9350505050611862565b5061206481614ff1565b9050611fdd565b506060949350505050565b600080600061208884602001516131f8565b9050600081856020015161209c9190615393565b905060008286600001516120b09190615331565b9196919550909350505050565b606060006120ce8460600151613331565b60ff166001600160401b038111156120e8576120e86137e7565b604051908082528060200260200182016040528015612111578160200160208202803683370190505b50905060005b6121248560600151613331565b60ff168110156124d557600182828151811061214257612142614fc5565b602090810291909101015260ff84166064141561227b5760008560600151602001516001600160a01b031663fe8c4aa36040518163ffffffff1660e01b815260040160206040518083038186803b15801561219c57600080fd5b505afa1580156121b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d491906150ad565b6060870151610100810151906121e990611a66565b6121f68960600151611a85565b604051602001612209949392919061500c565b60408051601f19818403018152918152815160209283012060008181526068909352908220549092506001600160801b03169061224882600883611e45565b905060ff81166001141561227757600085858151811061226a5761226a614fc5565b6020026020010181815250505b5050505b600082828151811061228f5761228f614fc5565b602002602001015111156124c557600060666040518060400160405280600f81526020016e2930b73237b6a3b2b732b930ba37b960891b8152506040516122d69190614f3f565b908152604051908190036020019020546001600160a01b03166352456227836001600160401b0381111561230c5761230c6137e7565b6040519080825280601f01601f191660200182016040528015612336576020820181803683370190505b5060608901516020810151610100820151909161235290611a66565b61235f8c60600151611a85565b60208d015160608e015160c001518e516040516001600160e01b031960e08b901b1681526123979897969594939291906004016153cd565b602060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e99190615435565b905060018114156124485760405162461bcd60e51b8152602060048201526024808201527f616c6c6f636174652072616e646f6d20686173207061737365642032353620626044820152636c6f636b60e01b606482015260840161073f565b60028114156124995760405162461bcd60e51b815260206004820152601f60248201527f616c6c6f636174652072616e646f6d20626c6f636b206e6f7420726561636800604482015260640161073f565b6124a56127108261544e565b8383815181106124b7576124b7614fc5565b602002602001018181525050505b6124ce81614ff1565b9050612117565b509392505050565b6060600083606001519050600081602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252757600080fd5b505afa15801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255f91906150ad565b6001600160a01b03166305cce54f83610100015161257c85611a85565b6040516001600160e01b031960e085901b16815263ffffffff92909216600483015261ffff16602482015260440160006040518083038186803b1580156125c257600080fd5b505afa1580156125d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125fe9190810190615470565b905061261f6040518060600160405280603281526020016155bb6032913950565b60008082516001600160401b0381111561263b5761263b6137e7565b604051908082528060200260200182016040528015612664578160200160208202803683370190505b509050600083516001600160401b03811115612682576126826137e7565b6040519080825280602002602001820160405280156126ab578160200160208202803683370190505b5090506000805b855181101561282d57600087602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156126fa57600080fd5b505afa15801561270e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273291906150ad565b8861010001516127418a611a85565b89858151811061275357612753614fc5565b602002602001015160405160200161276e9493929190614f92565b60408051601f1981840301815291815281516020928301206000818152606a909352912054909150806127a257505061281d565b8783815181106127b4576127b4614fc5565b60200260200101518688815181106127ce576127ce614fc5565b602002602001019060ff16908160ff1681525050808588815181106127f5576127f5614fc5565b60209081029190910101528661280a81614ff1565b975061281890508185615393565b935050505b61282681614ff1565b90506126b2565b5061283786613331565b60ff168110156128a45760405162461bcd60e51b815260206004820152603260248201527f416c6c6f636174654c696d697448616e646c65723a206e6f20656e6f75676820604482015271617661696c61626c65206272616e6368657360701b606482015260840161073f565b60006128af87613331565b60ff166001600160401b038111156128c9576128c96137e7565b6040519080825280602002602001820160405280156128f2578160200160208202803683370190505b50905060005b61290188613331565b60ff16811015612af657600080848c848151811061292157612921614fc5565b6020026020010151612933919061544e565b905060005b88811015612ae257828210158015612976575086818151811061295d5761295d614fc5565b6020026020010151836129709190615393565b92508282105b15612ad25786818151811061298d5761298d614fc5565b6020026020010180518091906129a290615509565b905250856129af81615509565b96505060008882815181106129c6576129c6614fc5565b60200260200101519050808686815181106129e3576129e3614fc5565b602002602001019060ff16908160ff168152505060008c602001516001600160a01b0316631424e30c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3657600080fd5b505afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e91906150ad565b8d6101000151612a7d8f611a85565b84604051602001612a919493929190614f92565b60408051601f1981840301815291815281516020928301206000818152606a90935290822080549193509091612ac683615509565b91905055505050612ae2565b612adb81614ff1565b9050612938565b50505080612aef90614ff1565b90506128f8565b509998505050505050505050565b612b0c613749565b612b14613749565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60006118628260a00151600860006008612b659190615393565b611a9f906010615393565b60006118628260a00151602060006008612b8a9190615393565b612b95906010615393565b612ba0906010615393565b611a9f906008615393565b60c081015160019015612bc65780612bc281614ff1565b9150505b8160e0015161271014612be15780612bdd81614ff1565b9150505b81610100015161271014612bfd5780612bf981614ff1565b9150505b61014082015151151580612c1657506101608201515115155b80612c2657506101a08201515115155b15612c98576000826101600151518361014001515111612c6b57826101a00151518361016001515111612c5f57826101a0015151612c73565b82610160015151612c73565b826101400151515b9050612c80816004615520565b612c8a9083615393565b60ff90911661012084015290505b806001600160401b03811115612cb057612cb06137e7565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b5083528151612ce990849061336c565b612cf78383602001516133c4565b612d058383606001516133fd565b612d1383836040015161344c565b612d2283836101200151613490565b60008060019050836080015162ffffff1661271014612d5757612d49858560800151613521565b612d5460018361553f565b91505b8360a0015163ffffffff1661271014612d8657612d78858560a00151613588565b612d8360028361553f565b91505b60c084015115612dcc5760c0840151855182612da181614ff1565b935081518110612db357612db3614fc5565b6020908102919091010152612dc960048361553f565b91505b8360e0015161271014612e155760e0840151855182612dea81614ff1565b935081518110612dfc57612dfc614fc5565b6020908102919091010152612e1260088361553f565b91505b83610100015161271014612e6057610100840151855182612e3581614ff1565b935081518110612e4757612e47614fc5565b6020908102919091010152612e5d60108361553f565b91505b61012084015160ff161561312b5760005b84610120015160ff1681101561311c57600085610140015151118015612e9c57508461014001515181105b15612ef3578461014001518181518110612eb857612eb8614fc5565b602002602001015186600001518380612ed090614ff1565b945081518110612ee257612ee2614fc5565b602002602001018181525050612f21565b855160009083612f0281614ff1565b945081518110612f1457612f14614fc5565b6020026020010181815250505b600085610160015151118015612f3c57508461016001515181105b15612f93578461016001518181518110612f5857612f58614fc5565b602002602001015186600001518380612f7090614ff1565b945081518110612f8257612f82614fc5565b602002602001018181525050612fc1565b855160009083612fa281614ff1565b945081518110612fb457612fb4614fc5565b6020026020010181815250505b600085610180015151118015612fdc57508461018001515181105b15613036578461018001518181518110612ff857612ff8614fc5565b602002602001015160ff168660000151838061301390614ff1565b94508151811061302557613025614fc5565b602002602001018181525050613063565b855181908361304481614ff1565b94508151811061305657613056614fc5565b6020026020010181815250505b6000856101a001515111801561307e5750846101a001515181105b156130de57846101a00151818151811061309a5761309a614fc5565b60200260200101516001600160a01b0316866000015183806130bb90614ff1565b9450815181106130cd576130cd614fc5565b60200260200101818152505061310c565b8551600090836130ed81614ff1565b9450815181106130ff576130ff614fc5565b6020026020010181815250505b61311581614ff1565b9050612e71565b5061312860208361553f565b91505b61313585836135fb565b5050505050565b805160009061314d57506000919050565b6020820151805160001a9060c082101561316b575060009392505050565b5060019392505050565b805160009061318657506000919050565b60008061319684602001516131f8565b84602001516131a59190615393565b90506000846000015185602001516131bd9190615393565b90505b808210156131ef576131d182613273565b6131db9083615393565b9150826131e781614ff1565b9350506131c0565b50909392505050565b8051600090811a60808110156132115750600092915050565b60b881108061322c575060c0811080159061322c575060f881105b1561323a5750600192915050565b60c08110156132675761324f600160b8615565565b61325c9060ff1682615331565b6116e7906001615393565b61324f600160f8615565565b80516000908190811a608081101561328e57600191506108b2565b60b88110156132b4576132a2608082615331565b6132ad906001615393565b91506108b2565b60c08110156132e15760b78103600185019450806020036101000a855104600182018101935050506108b2565b60f88110156132f5576132a260c082615331565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805160009060151461332857600080fd5b61186282611af7565b60006118628260a0015160106000600861334b9190615393565b613356906010615393565b613361906010615393565b611a80906008615393565b6133a1826000015160008151811061338657613386614fc5565b60200260200101518260ff16600860ff16600060ff1661193c565b825180516000906133b4576133b4614fc5565b6020026020010181815250505050565b6133a182600001516000815181106133de576133de614fc5565b60200260200101518260ff16600460ff1660006008611d9f919061530c565b6133a1826000015160008151811061341757613417614fc5565b60200260200101518260ff16600460ff1660006008613436919061530c565b61344190600461530c565b611d9f90600861530c565b6133a1826000015160008151811061346657613466614fc5565b60200260200101518260ff16600860ff1660006008613485919061530c565b611d9f90600461530c565b6133a182600001516000815181106134aa576134aa614fc5565b60200260200101518260ff16600860ff16600060086134c9919061530c565b6134d490600461530c565b6134df90600861530c565b6134ea90600461530c565b6134f590601061530c565b61350090601861530c565b61350b90602061530c565b61351690602061530c565b611d9f90602061530c565b6133a1826000015160008151811061353b5761353b614fc5565b60200260200101518262ffffff16601860ff166000600861355c919061530c565b61356790600461530c565b61357290600861530c565b61357d90600461530c565b611d9f90601061530c565b6133a182600001516000815181106135a2576135a2614fc5565b60200260200101518263ffffffff16602060ff16600060086135c4919061530c565b6135cf90600461530c565b6135da90600861530c565b6135e590600461530c565b6135f090601061530c565b611d9f90601861530c565b6133a1826000015160008151811061361557613615614fc5565b60200260200101518261ffff16601060ff1660006008613635919061530c565b61364090600461530c565b61348590600861530c565b82805461365790614ec7565b90600052602060002090601f01602090048101928261367957600085556136bf565b82601f1061369257805160ff19168380011785556136bf565b828001600101855582156136bf579182015b828111156136bf5782518255916020019190600101906136a4565b506136cb9291506137d2565b5090565b604080516080810182526000808252602082015260609181018290528181019190915290565b604051806040016040528060008152602001600081525090565b8280548282559060005260206000209081019282156136bf57916020028201828111156136bf5782518255916020019190600101906136a4565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156136cb57600081556001016137d3565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613820576138206137e7565b60405290565b60405160a081016001600160401b0381118282101715613820576138206137e7565b604080519081016001600160401b0381118282101715613820576138206137e7565b604051608081016001600160401b0381118282101715613820576138206137e7565b60405161018081016001600160401b0381118282101715613820576138206137e7565b604051606081016001600160401b0381118282101715613820576138206137e7565b60405161016081016001600160401b0381118282101715613820576138206137e7565b604051601f8201601f191681016001600160401b038111828210171561391c5761391c6137e7565b604052919050565b6001600160a01b0381168114610be557600080fd5b803561394481613924565b919050565b803563ffffffff8116811461394457600080fd5b60ff81168114610be557600080fd5b80356139448161395d565b803561ffff8116811461394457600080fd5b6000610140828403121561399c57600080fd5b6139a46137fd565b6139ad83613939565b81526139bb60208401613939565b60208201526139cc60408401613939565b60408201526139dd60608401613949565b60608201526139ee60808401613949565b60808201526139ff60a08401613939565b60a0820152613a1060c0840161396c565b60c0820152613a2160e08401613977565b60e0820152610100613a3481850161396c565b90820152610120613a4684820161396c565b908201529392505050565b60006001600160401b03821115613a6a57613a6a6137e7565b50601f01601f191660200190565b600082601f830112613a8957600080fd5b8135613a9c613a9782613a51565b6138f4565b818152846020838601011115613ab157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613aeb57600080fd5b8835613af681613924565b97506020890135613b0681613924565b96506040890135613b1681613924565b9550613b2460608a01613949565b94506080890135613b3481613924565b9350613b4260a08a01613949565b925060c08901356001600160401b03811115613b5d57600080fd5b613b698b828c01613a78565b925050613b7860e08a01613977565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613bcc5783518252928401926001929092019190840190613bac565b509695505050505050565b60005b83811015613bf2578181015183820152602001613bda565b83811115613c01576000848401525b50505050565b60008151808452613c1f816020860160208601613bd7565b601f01601f19169290920160200192915050565b6020815260006116e76020830184613c07565b600060208284031215613c5857600080fd5b5035919050565b60008060008060008060c08789031215613c7857600080fd5b8635613c8381613924565b95506020870135613c9381613924565b9450613ca160408801613949565b93506060870135613cb181613924565b9250613cbf60808801613949565b9150613ccd60a08801613977565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b81811015613d275783516001600160a01b031683529284019291840191600101613d02565b50909695505050505050565b60008060008060808587031215613d4957600080fd5b613d5285613949565b9350613d6060208601613977565b92506040850135613d708161395d565b915060608501356001600160401b03811115613d8b57600080fd5b613d9787828801613a78565b91505092959194509250565b60006001600160401b03821115613dbc57613dbc6137e7565b5060051b60200190565b60006020808385031215613dd957600080fd5b82356001600160401b0380821115613df057600080fd5b818501915085601f830112613e0457600080fd5b8135613e12613a9782613da3565b81815260059190911b83018401908481019088831115613e3157600080fd5b8585015b83811015613e6957803585811115613e4d5760008081fd5b613e5b8b89838a0101613a78565b845250918601918601613e35565b5098975050505050505050565b600080600080600060a08688031215613e8e57600080fd5b613e9786613949565b9450613ea560208701613977565b9350613eb360408701613977565b92506060860135613ec38161395d565b915060808601356001600160401b03811115613ede57600080fd5b613eea88828901613a78565b9150509295509295909350565b600082601f830112613f0857600080fd5b81356020613f18613a9783613da3565b82815260059290921b84018101918181019086841115613f3757600080fd5b8286015b84811015613bcc5780356001600160401b0380821115613f5a57600080fd5b9088019060a0828b03601f19011215613f7257600080fd5b613f7a613826565b86830135613f878161395d565b8152604083810135613f9881613924565b828901526060848101358284015260808501359083015260a084013583811115613fc25760008081fd5b8085019450508b603f850112613fda57600092508283fd5b878401359250613fec613a9784613da3565b83815260069390931b8401810192888101908d85111561400c5760008081fd5b948201945b848610156140635782868f0312156140295760008081fd5b614031613848565b61403a87613949565b81528a8701358060040b81146140505760008081fd5b818c015282529482019490890190614011565b6080840152505085525050918301918301613f3b565b60006080828403121561408b57600080fd5b61409361386a565b905081356140a081613924565b815260208201356140b08161395d565b602082015260408201356001600160401b03808211156140cf57600080fd5b6140db85838601613a78565b604084015260608401359150808211156140f457600080fd5b5061410184828501613a78565b60608301525092915050565b6000806040838503121561412057600080fd5b82356001600160401b038082111561413757600080fd5b9084019060a0828703121561414b57600080fd5b614153613826565b823561415e81613924565b8152602083013561416e81613924565b6020820152604083013561418181613924565b604082015260608301358281111561419857600080fd5b830161018081890312156141ab57600080fd5b6141b361388c565b6141bc82613939565b81526141ca60208301613939565b60208201526141db60408301613939565b60408201526141ec60608301613939565b60608201526080820135608082015260a082013560a082015261421160c08301613949565b60c082015261422260e08301613949565b60e0820152610100614235818401613949565b9082015261012061424783820161396c565b90820152610140828101358581111561425f57600080fd5b61426b8b828601613ef7565b828401525050610160808301358581111561428557600080fd5b6142918b828601613a78565b82840152505080606084015250506142ab6080840161396c565b6080820152935060208501359150808211156142c657600080fd5b506142d385828601614079565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261431860a0840182613c07565b90506060840151601f198483030160808501526143358282613c07565b95945050505050565b600082601f83011261434f57600080fd5b8135602061435f613a9783613da3565b82815260059290921b8401810191818101908684111561437e57600080fd5b8286015b84811015613bcc5780358352918301918301614382565b600082601f8301126143aa57600080fd5b813560206143ba613a9783613da3565b82815260059290921b840181019181810190868411156143d957600080fd5b8286015b84811015613bcc5780356143f081613924565b83529183019183016143dd565b600082601f83011261440e57600080fd5b8135602061441e613a9783613da3565b82815260059290921b8401810191818101908684111561443d57600080fd5b8286015b84811015613bcc5780356001600160401b038082111561446057600080fd5b90880190601f196080838c038201121561447957600080fd5b61448161386a565b878401358381111561449257600080fd5b84016060818e03840112156144a657600080fd5b6144ae6138af565b9250888101356144bd8161395d565b83526040818101356144ce81613924565b848b01526060820135858111156144e457600080fd5b6144f28f8c8386010161433e565b828601525083835261450581870161396c565b8a840152606086013593508484111561451d57600080fd5b61452b8e8b86890101614399565b9083015250608084013591508282111561454457600080fd5b6145528c898487010161433e565b60608201528652505050918301918301614441565b600082601f83011261457857600080fd5b81356020614588613a9783613da3565b82815260059290921b840181019181810190868411156145a757600080fd5b8286015b84811015613bcc5780356001600160401b038111156145ca5760008081fd5b6145d88986838b0101613a78565b8452509183019183016145ab565b600082601f8301126145f757600080fd5b81356020614607613a9783613da3565b82815260059290921b8401810191818101908684111561462657600080fd5b8286015b84811015613bcc5780356001600160401b038082111561464a5760008081fd5b9088019060a0828b03601f19018113156146645760008081fd5b61466c613826565b878401358381111561467e5760008081fd5b61468c8d8a838801016143fd565b825250604061469c81860161396c565b8983015260606146ad818701613939565b828401526080915081860135858111156146c75760008081fd5b6146d58f8c838a0101614399565b828501525050828501359250838311156146ef5760008081fd5b6146fd8d8a85880101614567565b90820152865250505091830191830161462a565b600082601f83011261472257600080fd5b81356020614732613a9783613da3565b82815260059290921b8401810191818101908684111561475157600080fd5b8286015b84811015613bcc5780356147688161395d565b8352918301918301614755565b80356001600160401b038116811461394457600080fd5b600082601f83011261479d57600080fd5b813560206147ad613a9783613da3565b82815260059290921b840181019181810190868411156147cc57600080fd5b8286015b84811015613bcc5780356001600160401b03808211156147f05760008081fd5b90880190610160828b03601f190181131561480b5760008081fd5b6148136138d1565b61481e888501613977565b8152604061482d818601613977565b89830152606061483e81870161396c565b8284015260809150614851828701613949565b9083015260a061486286820161396c565b8284015260c09150614875828701613949565b9083015260e0614886868201613949565b82840152610100915061489a828701614775565b9083015261012085810135858111156148b35760008081fd5b6148c18f8c838a0101614399565b8385015250610140915081860135858111156148dd5760008081fd5b6148eb8f8c838a0101614567565b8285015250506148fc838601613939565b9082015286525050509183019183016147d0565b600082601f83011261492157600080fd5b81356020614931613a9783613da3565b82815260059290921b8401810191818101908684111561495057600080fd5b8286015b84811015613bcc5780356001600160401b03808211156149745760008081fd5b9088019060a0828b03601f190181131561498e5760008081fd5b614996613826565b6149a1888501613949565b8152604080850135848111156149b75760008081fd5b6149c58e8b83890101613a78565b8a84015250606080860135858111156149de5760008081fd5b6149ec8f8c838a0101613a78565b8385015250608091508186013585811115614a075760008081fd5b614a158f8c838a0101613a78565b828501525050614a2683860161396c565b908201528652505050918301918301614954565b60008060408385031215614a4d57600080fd5b614a5683613949565b915060208301356001600160401b0380821115614a7257600080fd5b908401906101608287031215614a8757600080fd5b614a8f6138d1565b823582811115614a9e57600080fd5b614aaa888286016145e6565b825250602083013582811115614abf57600080fd5b614acb88828601614711565b602083015250604083013582811115614ae357600080fd5b614aef8882860161478c565b604083015250606083013582811115614b0757600080fd5b614b1388828601614910565b606083015250608083013582811115614b2b57600080fd5b614b3788828601614711565b60808301525060a083013582811115614b4f57600080fd5b614b5b88828601614399565b60a08301525060c083013582811115614b7357600080fd5b614b7f88828601614399565b60c083015250614b9160e08401613949565b60e0820152610100614ba4818501613949565b90820152610120614bb684820161396c565b908201526101408381013583811115614bce57600080fd5b614bda89828701613a78565b8284015250508093505050509250929050565b600060208284031215614bff57600080fd5b81356001600160401b0380821115614c1657600080fd5b908301906101608286031215614c2b57600080fd5b614c336138d1565b614c3c83613939565b8152614c4a60208401613939565b6020820152614c5b60408401613949565b6040820152614c6c60608401613977565b6060820152614c7d60808401613977565b6080820152614c8e60a0840161396c565b60a0820152614c9f60c08401613939565b60c0820152614cb060e08401613949565b60e0820152610100614cc3818501613939565b90820152610120614cd584820161396c565b908201526101408381013583811115614ced57600080fd5b614cf988828701613a78565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614d5f57603f19888603018452614d4d858351613c07565b94509285019290850190600101614d31565b5092979650505050505050565b600060208284031215614d7e57600080fd5b81356001600160401b03811115614d9457600080fd5b61045484828501614399565b600080600060608486031215614db557600080fd5b614dbe84613949565b9250614dcc60208501613977565b91506040840135614ddc8161395d565b809150509250925092565b600060208284031215614df957600080fd5b81356116e781613924565b600081518084526020808501945080840160005b83811015614e3757815160ff1687529582019590820190600101614e18565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614eb957888303603f1901855281518051878552614e8d88860182614e04565b91890151858303868b0152919050614ea58183614e04565b968901969450505090860190600101614e69565b509098975050505050505050565b600181811c90821680614edb57607f821691505b6020821081141561160a57634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b60008251614f51818460208701613bd7565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561500557615005614fdb565b5060010190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff908116604084015216606082015260800190565b6001600160a01b03978816815263ffffffff968716602082015261ffff9586166040820152939094166060840152908516608083015290921660a083015290911660c082015260e00190565b60006020828403121561509d57600080fd5b815180151581146116e757600080fd5b6000602082840312156150bf57600080fd5b81516116e781613924565b608081526150dc608082018651613cd9565b600060208601516150f060a0840182613cd9565b50604086015163ffffffff811660c084015250606086015161ffff811660e084015250608086015161010061512a8185018361ffff169052565b60a088015191506101206151428186018460ff169052565b60c0890151925061014061515881870185613cd9565b60e08a015193506101606151738188018663ffffffff169052565b838b01519450615187610180880186613cd9565b918a015160ff166101a08701528901516101c086019190915291506151b290506101e0840182613c07565b9150506151ca60208301866001600160801b03169052565b60408201939093526060015292915050565b60006151ea613a9784613a51565b90508281528383830111156151fe57600080fd5b6116e7836020830184613bd7565b6000602080838503121561521f57600080fd5b82516001600160401b038082111561523657600080fd5b818501915085601f83011261524a57600080fd5b8151615258613a9782613da3565b81815260059190911b8301840190848101908883111561527757600080fd5b8585015b83811015613e69578051858111156152935760008081fd5b8601603f81018b136152a55760008081fd5b6152b68b89830151604084016151dc565b84525091860191860161527b565b6000602082840312156152d657600080fd5b81516001600160401b038111156152ec57600080fd5b8201601f810184136152fd57600080fd5b610454848251602084016151dc565b600060ff821660ff84168060ff0382111561532957615329614fdb565b019392505050565b60008282101561534357615343614fdb565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082198211156153a6576153a6614fdb565b500190565b600061ffff808316818114156153c3576153c3614fdb565b6001019392505050565b60006101008083526153e18184018c613c07565b6001600160a01b039a8b16602085015263ffffffff998a16604085015261ffff98891660608501529690971660808301525092871660a0840152941660c08201529290931660e09092019190915250919050565b60006020828403121561544757600080fd5b5051919050565b60008261546b57634e487b7160e01b600052601260045260246000fd5b500690565b6000602080838503121561548357600080fd5b82516001600160401b0381111561549957600080fd5b8301601f810185136154aa57600080fd5b80516154b8613a9782613da3565b81815260059190911b820183019083810190878311156154d757600080fd5b928401925b828410156154fe5783516154ef8161395d565b825292840192908401906154dc565b979650505050505050565b60008161551857615518614fdb565b506000190190565b600081600019048311821515161561553a5761553a614fdb565b500290565b600061ffff80831681851680830382111561555c5761555c614fdb565b01949350505050565b600060ff821660ff84168082101561557f5761557f614fdb565b9003939250505056fe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20312d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20322d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20302d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20372d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d20342d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20416c6c6f636174654c696d6974202d2d2d2d2d2038a2646970667358221220e208e0b24519ee2845bde22929da1bd83d38fca1a610ea8e2c69eb673a32594364736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/handler/AllocateLimitHandlerLib.sol": {
      "AllocateLimitHandlerLib": [
        {
          "length": 20,
          "start": 4753
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/handler/AllocateLimitHandlerLib.sol": {
      "AllocateLimitHandlerLib": [
        {
          "length": 20,
          "start": 4720
        }
      ]
    }
  }
}
