{
  "_format": "hh-sol-artifact-1",
  "contractName": "StakePermitHandler",
  "sourceName": "contracts/V3/handler/StakePermitHandler.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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "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": "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "0x608060405234801561001057600080fd5b50615d2b80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101955760003560e01c8063715018a6116100ef578063af84b51f11610092578063af84b51f1461038d578063b41bd789146103ad578063b4b70352146103c0578063ca15c873146103d3578063d0d35b55146103e6578063d547741f1461040a578063f2fde38b1461041d578063f2fe4fa51461043057600080fd5b8063715018a6146102fc5780638129fc1c146103045780638da5cb5b1461030c5780639010d07c1461032c57806391d148541461033f57806395edcb0814610352578063a217fddf14610372578063a903620c1461037a57600080fd5b806301ffc9a71461019a5780631cc4f041146101c25780631eda6e4f146101d6578063248a9ca3146101f65780632f2ff15d1461022757806330adf81f1461023c57806334c76b25146102635780633644e5151461028057806336568abe146102895780634b2dbcb81461029c5780634b2e9b411461029c57806354fd4d50146102bc5780635790c294146102c357806362329cc5146102d65780636dabaf04146102e9575b600080fd5b6101ad6101a8366004613af1565b61043f565b60405190151581526020015b60405180910390f35b6101ad6101d0366004613cb8565b50600090565b6101e96101e4366004613dfd565b61046a565b6040516101b99190613eb6565b610219610204366004613f06565b60009081526098602052604090206001015490565b6040519081526020016101b9565b61023a610235366004613f1f565b61052c565b005b6102197f147ab4edb86d9069e61306bf07acb53c3b8f5d15d90d915258555c2ab11ea33981565b6040805160208101909152600081525b6040516101b99190613f9f565b61021960fc5481565b61023a610297366004613f1f565b610556565b6102af6102aa366004613fb2565b6105d9565b6040516101b99190614039565b6000610219565b61023a6102d1366004614086565b61060a565b6102af6102e4366004614119565b610682565b6101ad6102f73660046141bc565b61075f565b61023a610781565b61023a6107bc565b610314610974565b6040516001600160a01b0390911681526020016101b9565b61031461033a36600461423d565b610983565b6101ad61034d366004613f1f565b6109a2565b610365610360366004614475565b6109cd565b6040516101b99190614645565b610219600081565b61023a610388366004614da2565b61107f565b6103a061039b366004614f55565b6110f7565b6040516101b99190615072565b61023a6103bb3660046150d4565b61116e565b6101ad6103ce366004613cb8565b611218565b6102196103e1366004613f06565b61128b565b6102736103f4366004615108565b6040805160208101909152600081529392505050565b61023a610418366004613f1f565b6112a2565b61023a61042b36600461514f565b6112c7565b60606040516101b991906151aa565b60006001600160e01b03198216635a05180f60e01b1480610464575061046482611364565b92915050565b6040805160208101909152606081526104a16040518060600160405280602f8152602001615c83602f91398563ffffffff16611399565b60006104b333898989898e60006113de565b600081815260fd602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561051257602002820191906000526020600020905b8154815260200190600101908083116104fe575b5050509190925250919d9c50505050505050505050505050565b6000828152609860205260409020600101546105478161144d565b6105518383611457565b505050565b6001600160a01b03811633146105cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105d58282611479565b5050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b815250606581604051610642919061522f565b90815260405190819003602001902054336001600160a01b039091161461067b5760405162461bcd60e51b81526004016105c29061524b565b5050505050565b6060600082516001600160401b0381111561069f5761069f613b1b565b6040519080825280602002602001820160405280156106c8578160200160208202803683370190505b50905060005b81518110156107585760658482815181106106eb576106eb615282565b6020026020010151604051610700919061522f565b9081526040519081900360200190205482516001600160a01b039091169083908390811061073057610730615282565b6001600160a01b0390921660209283029190910190910152610751816152ae565b90506106ce565b5092915050565b600060ff8316610775576107758686868561149b565b50600195945050505050565b3361078a610974565b6001600160a01b0316146107b05760405162461bcd60e51b81526004016105c2906152c7565b6107ba6000611987565b565b60006107c860016119d9565b905080156107e0576000805461ff0019166101001790555b60408051808201909152601381527214dc185b92185b991b195c8818da185a5b9259606a1b602082015246906108169082611399565b604080518082018252601281527129ba30b5b2a832b936b4ba2430b7323632b960711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f22b589830ace2886a16af53b094ac409eaf35335a284206c1bdf637a66c4fccf818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018490523060a0808301919091528351808303909101815260c082018085528151919093012060fc8190556101008201909352601082526f2227a6a0a4a72fa9a2a820a920aa27a960811b60e09091015261092291611399565b61092a611a66565b508015610971576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b600082815260ca6020526040812061099b9083611a95565b9392505050565b60009182526098602090815260408084206001600160a01b0393909316845291905290205460ff1690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b815250606581604051610a1f919061522f565b90815260405190819003602001902054336001600160a01b0390911614610a585760405162461bcd60e51b81526004016105c29061524b565b610a926040518060400160405280601981526020017829ba30b5b2a832b936b4ba10383937b1b2b9b9903132b3b4b760391b815250611aa1565b3083526060840151600090610aa690611ae4565b9050600085606001516101000151610ac18760600151611af0565b610ace8860600151611b0f565b604051602001610ae0939291906152fc565b6040516020818303038152906040528051906020012090506000610b1c610b178460008a60600151611b349092919063ffffffff16565b611b8e565b90506000610b73338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610b60578c6060015160e00151610b6a565b8c6060015160c001515b8d5160006113de565b9050610b7f8883611bdc565b60001960ff831601610d55576000805b8960600151610140015151811015610bef57896060015161014001518181518110610bbc57610bbc615282565b602002602001015160400151600014610bdd5781610bd9816152ae565b9250505b80610be7816152ae565b915050610b8f565b506000816001600160401b03811115610c0a57610c0a613b1b565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b509050600260ff168a606001516101400151600081518110610c5757610c57615282565b60200260200101516000015160ff1603610cd85760005b8a60600151610140015151811015610cd6578a6060015161014001518181518110610c9b57610c9b615282565b602002602001015160400151828281518110610cb957610cb9615282565b602090810291909101015280610cce816152ae565b915050610c6e565b505b610100805460608c0151909101518b51604051634e5c49e360e11b81526001600160a01b0390931692639cb893c692610d1c9290918a91908790829060040161534e565b600060405180830381600087803b158015610d3657600080fd5b505af1158015610d4a573d6000803e3d6000fd5b505050505050611039565b60011960ff831601610e0557600088606001516101400151600081518110610d7f57610d7f615282565b602090810291909101015160600151610100548a51604051636ebf181b60e01b815260048101889052602481018490526001600160a01b0391821660448201529293501690636ebf181b90606401600060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b5050505050611039565b60021960ff831601610f70576060880151600090610e2e90610e2990876001611b34565b611c38565b9050600081516001600160401b03811115610e4b57610e4b613b1b565b604051908082528060200260200182016040528015610e74578160200160208202803683370190505b50905060005b8151811015610ed457610ea5838281518110610e9857610e98615282565b6020026020010151611b8e565b828281518110610eb757610eb7615282565b602090810291909101015280610ecc816152ae565b915050610e7a565b50610100805460608c0151909101518b51604051637fb103ed60e01b81526001600160a01b0390931692637fb103ed92610f179290918a91908790600401615397565b6020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a91906153d4565b50610f688a84868489611d41565b505050611039565b60031960ff831601610fa257600080610f89858b611f02565b91509150610f9b8a848685858a612360565b5050611039565b60041960ff831601611039576060880151600090610fc690610b1790876001611b34565b610100548a5160405163468ed88960e01b8152600481018490526001600160a01b03918216602482015260448101889052929350169063468ed88990606401600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b50505050505b60ff82166001148061104e575060ff82166002145b8061105c575060ff82166005145b1561106c5761106c88828461255d565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516110be919061522f565b90815260405190819003602001902054336001600160a01b03909116146105515760405162461bcd60e51b81526004016105c29061524b565b6101005460405163af84b51f60e01b81526060916001600160a01b03169063af84b51f906111299085906004016153ed565b600060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104649190810190615589565b33611177610974565b6001600160a01b03161461119d5760405162461bcd60e51b81526004016105c2906152c7565b6111a6816125c6565b604080518082018252601b81527a29aa20a5a2afa822a926a4aa2fa420a7222622a92fa422a62822a960291b602082015290516065916111e59161522f565b9081526040519081900360200190205461010080546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b815250606581604051611249919061522f565b90815260405190819003602001902054336001600160a01b03909116146112825760405162461bcd60e51b81526004016105c29061524b565b50600092915050565b600081815260ca60205260408120610464906126e8565b6000828152609860205260409020600101546112bd8161144d565b6105518383611479565b336112d0610974565b6001600160a01b0316146112f65760405162461bcd60e51b81526004016105c2906152c7565b6001600160a01b03811661135b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c2565b61097181611987565b60006001600160e01b03198216637965db0b60e01b148061046457506301ffc9a760e01b6001600160e01b0319831614610464565b6105d582826040516024016113af9291906155bd565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b1790526126f2565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b61097181336126fb565b611461828261275f565b600082815260ca6020526040902061055190826127e5565b61148382826127fa565b600082815260ca602052604090206105519082612861565b6114ce604051806040016040528060128152602001712fbab83230ba329030b933b9903132b3b4b760711b815250611aa1565b60006114d982612876565b905080516000036114ea5750611981565b6000858585604051602001611501939291906152fc565b604051602081830303815290604052805190602001209050620151804261152891906155df565b6115329042615601565b600082815260fe6020908152604080832063ffffffff94909416909355825161012081018452828152908101829052918201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261159b846000612886565b8160e0018181525050600080336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160b919061561f565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061561f565b6001600160a01b0316632c34025e8a8a60026040518463ffffffff1660e01b815260040161169c9392919061563c565b600060405180830381865afa1580156116b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116e19190810190615895565b9150915081156117245780515115611724578051805160009061170657611706615282565b602090810291909101810151518101516001600160a01b0316908401525b336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061561f565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e9919061561f565b6001600160a01b0316632c34025e8a8a60016040518463ffffffff1660e01b81526004016118199392919061563c565b600060405180830381865afa158015611836573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261185e9190810190615895565b9092509050811561189f578051511561189f578051805160009061188457611884615282565b6020908102919091018101515101516001600160a01b031683525b6118aa8660016128c4565b6001600160a01b0390811660a0850152610100546040516305d1905360e11b8152911690630ba320a6906118e49087908790600401615986565b600060405180830381600087803b1580156118fe57600080fd5b505af1158015611912573d6000803e3d6000fd5b5050505060006119218561290f565b905061192d8186612962565b61193b858560a001516129ad565b611949818560a001516129ad565b61197a6040518060400160405280601081526020016f17dd5c19185d1948185c99dcc8195b9960821b815250611aa1565b5050505050505b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611a20578160ff1660011480156119fc5750303b155b611a185760405162461bcd60e51b81526004016105c290615a11565b506000919050565b60005460ff808416911610611a475760405162461bcd60e51b81526004016105c290615a11565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff16611a8d5760405162461bcd60e51b81526004016105c290615a5f565b6107ba6129b7565b600061099b83836129e7565b61097181604051602401611ab59190613f9f565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526126f2565b60606104648230612a11565b60006104648260a00151601060006008611b0a9190615aaa565b612ab6565b60006104648260a00151601060006008611b299190615aaa565b611b0a906010615aaa565b611b3c6139ee565b611b6b83611b4b846001615abd565b60ff1681518110611b5e57611b5e615282565b6020026020010151611c38565b600281518110611b7d57611b7d615282565b602002602001015190509392505050565b805160009015801590611ba357508151602110155b611bac57600080fd5b600080611bb884612ad5565b815191935091506020821015611bd45760208290036101000a90045b949350505050565b6000611beb8360600151612b1c565b90508060ff168260ff16146105515760405162461bcd60e51b81526020600482015260136024820152720c6dac840c4e4c2dcc6d040dad2e6dac2e8c6d606b1b60448201526064016105c2565b6060611c4382612b41565b611c4c57600080fd5b6000611c5783612b7c565b90506000816001600160401b03811115611c7357611c73613b1b565b604051908082528060200260200182016040528015611cac57816020015b611c996139ee565b815260200190600190039081611c915790505b5090506000611cbe8560200151612c01565b8560200151611ccd9190615aaa565b90506000805b84811015611d3657611ce483612c7c565b9150604051806040016040528083815260200184815250848281518110611d0d57611d0d615282565b6020908102919091010152611d228284615aaa565b925080611d2e816152ae565b915050611cd3565b509195945050505050565b6000611d79604051806040016040528060158152602001742fb83937b1b2b9b9aab739ba30b5b2903132b3b4b760591b815250611aa1565b6000611d83612d20565b9050611d9b6040518060200160405280606081525090565b6001606083015260ff86168252610140820185905284516001600160401b03811115611dc957611dc9613b1b565b604051908082528060200260200182016040528015611df2578160200160208202803683370190505b50610160830152845160ff1661012083015284516001600160401b03811115611e1d57611e1d613b1b565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b5061018083015260005b82610180015151811015611e9a57808361018001518281518110611e7657611e76615282565b60ff9092166020928302919091019091015280611e92816152ae565b915050611e50565b5060696040830152611eac8183612d67565b600087815260fd60209081526040909120825180518493611ed1928492910190613a08565b50905050816101600151600081518110611eed57611eed615282565b60200260200101519250505095945050505050565b6000806000611f148460600151611ae4565b9050600080611f36610b178460018960600151611b349092919063ffffffff16565b90506000611f57610b178560028a60600151611b349092919063ffffffff16565b90506000611f78610b178660038b60600151611b349092919063ffffffff16565b60408051808201909152601a8152790eed2e8d0c8e4c2ee84f2a6d2ce40eed2e8d0c8e4c2ee90c2e6d60331b6020820152909150611fb69082611399565b600081815260ff602081905260409091205416156120045760405162461bcd60e51b815260206004820152600b60248201526a686173682065786973742160a81b60448201526064016105c2565b600081815260ff60205260408120805460ff19166001179055606089015161203290610b1790886004611b34565b9050804211156120785760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c9948195e1c1a5c9959607a1b60448201526064016105c2565b60fc548951604080517f147ab4edb86d9069e61306bf07acb53c3b8f5d15d90d915258555c2ab11ea3396020808301919091526001600160a01b0390931681830152606081018890526080810187905260a0810186905260c08082018690528251808303909101815260e082019092528151919092012061190160f01b610100830152610102820192909252610122810191909152610142016040516020818303038152906040528051906020012094505050505060008061214d610b178560058a60600151611b349092919063ffffffff16565b9050600061216e610b178660068b60600151611b349092919063ffffffff16565b606089015190915060009061218990610b1790886007611b34565b60408051600081526020810180835288905260ff861691810191909152606081018490526080810182905290915060019060a0016020604051602081039080840390855afa1580156121df573d6000803e3d6000fd5b50505060206040510351935050505061221f6040518060400160405280600f81526020016e7265636f766572206164647265737360881b8152508261335f565b61223161222b8861290f565b826109a2565b6122735760405162461bcd60e51b815260206004820152601360248201527239b4b3b732b91030b1b1b2b9b99032b93937b960691b60448201526064016105c2565b50606085015160009061228c90610b1790856001611b34565b905060006122ad610b178560028a60600151611b349092919063ffffffff16565b6101005460608901519192506001600160a01b031690632d319e68908a906122db90610b1790896003611b34565b8a5160405160e085901b6001600160e01b0319168152600481019390935260248301919091526001600160a01b03166044820152606481018590526084810184905260a401600060405180830381600087803b15801561233a57600080fd5b505af115801561234e573d6000803e3d6000fd5b50939a92995091975050505050505050565b612394604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b815250611aa1565b6123c9604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525084611399565b6123fe604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525083611399565b6000612408612d20565b90506124206040518060200160405280606081525090565b6001606083015260ff8616825284156124d55760408051600180825281830190925290602080830190803683375050506101408301819052805186919060009061246c5761246c615282565b60209081029190910101526067604083015283156124d0576040805160018082528183019092529060208083019080368337505050610160830181905280518591906000906124bd576124bd615282565b6020908102919091010152606860408301525b612521565b60408051600180825281830190925290602080830190803683375050506101608301819052805185919060009061250e5761250e615282565b6020908102919091010152606660408301525b61252b8183612d67565b600087815260fd60209081526040909120825180518493612550928492910190613a08565b5050505050505050505050565b6000612567612d20565b905061257f6040518060200160405280606081525090565b60656040830152600160208301526125978183612d67565b600084815260fd602090815260409091208251805184936125bc928492910190613a08565b5050505050505050565b336125cf610974565b6001600160a01b0316146125f55760405162461bcd60e51b81526004016105c2906152c7565b60005b81518110156105d55781818151811061261357612613615282565b6020026020010151606583838151811061262f5761262f615282565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269c9190810190615ad6565b6040516126a9919061522f565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556126e1816152ae565b90506125f8565b6000610464825490565b610971816133a4565b61270582826109a2565b6105d55761271d816001600160a01b031660146133c5565b6127288360206133c5565b604051602001612739929190615b1e565b60408051601f198184030181529082905262461bcd60e51b82526105c291600401613f9f565b61276982826109a2565b6105d55760008281526098602090815260408083206001600160a01b03851684529091529020805460ff191660011790556127a13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061099b836001600160a01b038416613560565b61280482826109a2565b156105d55760008281526098602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061099b836001600160a01b0384166135af565b6060600061099b610e29846136a2565b600080612895610e29856136a2565b9050611bd46128b2828560ff1681518110611b5e57611b5e615282565b600281518110610e9857610e98615282565b6000806128d3610e29856136a2565b9050611bd46128f0828560ff1681518110611b5e57611b5e615282565b60028151811061290257612902615282565b60200260200101516136c8565b600081604051602001612945918152604060208201819052600990820152685349474e5f524f4c4560b81b606082015260800190565b604051602081830303815290604052805190602001209050919050565b600082815260986020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6105d58282611457565b600054610100900460ff166129de5760405162461bcd60e51b81526004016105c290615a5f565b6107ba33611987565b60008260000182815481106129fe576129fe615282565b9060005260206000200154905092915050565b60606000612a26610e298561016001516136a2565b905060005b8151811015612aab576000612a60612a4e848481518110611b5e57611b5e615282565b60008151811061290257612902615282565b9050846001600160a01b0316816001600160a01b031603612a9a57612a90838381518110611b5e57611b5e615282565b9350505050610464565b50612aa4816152ae565b9050612a2b565b506060949350505050565b91821c91600080612aca600180861b615601565b909416949350505050565b6000806000612ae78460200151612c01565b90506000818560200151612afb9190615aaa565b90506000828660000151612b0f9190615601565b9196919550909350505050565b60006104648260a00151600860006008612b369190615aaa565b611b29906010615aaa565b80516000908103612b5457506000919050565b6020820151805160001a9060c0821015612b72575060009392505050565b5060019392505050565b80516000908103612b8f57506000919050565b600080612b9f8460200151612c01565b8460200151612bae9190615aaa565b9050600084600001518560200151612bc69190615aaa565b90505b80821015612bf857612bda82612c7c565b612be49083615aaa565b915082612bf0816152ae565b935050612bc9565b50909392505050565b8051600090811a6080811015612c1a5750600092915050565b60b8811080612c35575060c08110801590612c35575060f881105b15612c435750600192915050565b60c0811015612c7057612c58600160b8615b8d565b612c659060ff1682615601565b61099b906001615aaa565b612c58600160f8615b8d565b80516000908190811a6080811015612c975760019150610758565b60b8811015612cbd57612cab608082615601565b612cb6906001615aaa565b9150610758565b60c0811015612cea5760b78103600185019450806020036101000a85510460018201810193505050610758565b60f8811015612cfe57612cab60c082615601565b60019390930151602084900360f7016101000a900490920160f5190192915050565b612d28613a53565b612d30613a53565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612d825780612d7e816152ae565b9150505b8160e0015161271014612d9d5780612d99816152ae565b9150505b81610100015161271014612db95780612db5816152ae565b9150505b61014082015151151580612dd257506101608201515115155b80612de257506101a08201515115155b15612e54576000826101600151518361014001515111612e2757826101a00151518361016001515111612e1b57826101a0015151612e2f565b82610160015151612e2f565b826101400151515b9050612e3c816004615ba6565b612e469083615aaa565b60ff90911661012084015290505b612e7e6040518060600160405280602e8152602001615c30602e913983610120015160ff16611399565b806001600160401b03811115612e9657612e96613b1b565b604051908082528060200260200182016040528015612ebf578160200160208202803683370190505b5083528151612ecf9084906136e2565b612edd83836020015161373a565b612eeb83836060015161377b565b612ef98383604001516137ca565b612f088383610120015161380e565b612f29604051806060016040528060258152602001615c5e60259139611aa1565b60008060019050836080015162ffffff1661271014612f5e57612f5085856080015161389f565b612f5b600183615bbd565b91505b8360a0015163ffffffff1661271014612f8d57612f7f858560a00151613906565b612f8a600283615bbd565b91505b60c084015115612fd35760c0840151855182612fa8816152ae565b935081518110612fba57612fba615282565b6020908102919091010152612fd0600483615bbd565b91505b8360e001516127101461301c5760e0840151855182612ff1816152ae565b93508151811061300357613003615282565b6020908102919091010152613019600883615bbd565b91505b836101000151612710146130675761010084015185518261303c816152ae565b93508151811061304e5761304e615282565b6020908102919091010152613064601083615bbd565b91505b61012084015160ff16156133555760005b84610120015160ff16811015613323576000856101400151511180156130a357508461014001515181105b156130fa5784610140015181815181106130bf576130bf615282565b6020026020010151866000015183806130d7906152ae565b9450815181106130e9576130e9615282565b602002602001018181525050613128565b855160009083613109816152ae565b94508151811061311b5761311b615282565b6020026020010181815250505b60008561016001515111801561314357508461016001515181105b1561319a57846101600151818151811061315f5761315f615282565b602002602001015186600001518380613177906152ae565b94508151811061318957613189615282565b6020026020010181815250506131c8565b8551600090836131a9816152ae565b9450815181106131bb576131bb615282565b6020026020010181815250505b6000856101800151511180156131e357508461018001515181105b1561323d5784610180015181815181106131ff576131ff615282565b602002602001015160ff168660000151838061321a906152ae565b94508151811061322c5761322c615282565b60200260200101818152505061326a565b855181908361324b816152ae565b94508151811061325d5761325d615282565b6020026020010181815250505b6000856101a00151511180156132855750846101a001515181105b156132e557846101a0015181815181106132a1576132a1615282565b60200260200101516001600160a01b0316866000015183806132c2906152ae565b9450815181106132d4576132d4615282565b602002602001018181525050613313565b8551600090836132f4816152ae565b94508151811061330657613306615282565b6020026020010181815250505b61331c816152ae565b9050613078565b5061332f602083615bbd565b9150613355604051806080016040528060448152602001615cb260449139865151611399565b61067b8583613979565b6105d58282604051602401613375929190615bd8565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526126f2565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b606060006133d4836002615ba6565b6133df906002615aaa565b6001600160401b038111156133f6576133f6613b1b565b6040519080825280601f01601f191660200182016040528015613420576020820181803683370190505b509050600360fc1b8160008151811061343b5761343b615282565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061346a5761346a615282565b60200101906001600160f81b031916908160001a905350600061348e846002615ba6565b613499906001615aaa565b90505b6001811115613511576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134cd576134cd615282565b1a60f81b8282815181106134e3576134e3615282565b60200101906001600160f81b031916908160001a90535060049490941c9361350a81615c02565b905061349c565b50831561099b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105c2565b60008181526001830160205260408120546135a757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610464565b506000610464565b600081815260018301602052604081205480156136985760006135d3600183615601565b85549091506000906135e790600190615601565b905081811461364c57600086600001828154811061360757613607615282565b906000526020600020015490508087600001848154811061362a5761362a615282565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061365d5761365d615c19565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610464565b6000915050610464565b6136aa6139ee565b50604080518082019091528151815260209182019181019190915290565b80516000906015146136d957600080fd5b61046482611b8e565b61371782600001516000815181106136fc576136fc615282565b60200260200101518260ff16600860ff16600060ff166139c9565b8251805160009061372a5761372a615282565b6020026020010181815250505050565b613717826000015160008151811061375457613754615282565b60200260200101518260ff16600460ff16600060086137739190615abd565b60ff166139c9565b613717826000015160008151811061379557613795615282565b60200260200101518260ff16600460ff16600060086137b49190615abd565b6137bf906004615abd565b613773906008615abd565b61371782600001516000815181106137e4576137e4615282565b60200260200101518260ff16600860ff16600060086138039190615abd565b613773906004615abd565b613717826000015160008151811061382857613828615282565b60200260200101518260ff16600860ff16600060086138479190615abd565b613852906004615abd565b61385d906008615abd565b613868906004615abd565b613873906010615abd565b61387e906018615abd565b613889906020615abd565b613894906020615abd565b613773906020615abd565b61371782600001516000815181106138b9576138b9615282565b60200260200101518262ffffff16601860ff16600060086138da9190615abd565b6138e5906004615abd565b6138f0906008615abd565b6138fb906004615abd565b613773906010615abd565b613717826000015160008151811061392057613920615282565b60200260200101518263ffffffff16602060ff16600060086139429190615abd565b61394d906004615abd565b613958906008615abd565b613963906004615abd565b61396e906010615abd565b613773906018615abd565b613717826000015160008151811061399357613993615282565b60200260200101518261ffff16601060ff16600060086139b39190615abd565b6139be906004615abd565b613803906008615abd565b600083821b81836139dd600180881b615601565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215613a43579160200282015b82811115613a43578251825591602001919060010190613a28565b50613a4f929150613adc565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115613a4f5760008155600101613add565b600060208284031215613b0357600080fd5b81356001600160e01b03198116811461099b57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613b5457613b54613b1b565b60405290565b60405160a081016001600160401b0381118282101715613b5457613b54613b1b565b604080519081016001600160401b0381118282101715613b5457613b54613b1b565b604051608081016001600160401b0381118282101715613b5457613b54613b1b565b60405161018081016001600160401b0381118282101715613b5457613b54613b1b565b604051606081016001600160401b0381118282101715613b5457613b54613b1b565b60405161016081016001600160401b0381118282101715613b5457613b54613b1b565b604051601f8201601f191681016001600160401b0381118282101715613c5057613c50613b1b565b604052919050565b6001600160a01b038116811461097157600080fd5b8035611a6181613c58565b803563ffffffff81168114611a6157600080fd5b60ff8116811461097157600080fd5b8035611a6181613c8c565b803561ffff81168114611a6157600080fd5b60006101408284031215613ccb57600080fd5b613cd3613b31565b613cdc83613c6d565b8152613cea60208401613c6d565b6020820152613cfb60408401613c6d565b6040820152613d0c60608401613c78565b6060820152613d1d60808401613c78565b6080820152613d2e60a08401613c6d565b60a0820152613d3f60c08401613c9b565b60c0820152613d5060e08401613ca6565b60e0820152610100613d63818501613c9b565b90820152610120613d75848201613c9b565b908201529392505050565b60006001600160401b03821115613d9957613d99613b1b565b50601f01601f191660200190565b600082601f830112613db857600080fd5b8135613dcb613dc682613d80565b613c28565b818152846020838601011115613de057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613e1a57600080fd5b8835613e2581613c58565b97506020890135613e3581613c58565b96506040890135613e4581613c58565b9550613e5360608a01613c78565b94506080890135613e6381613c58565b9350613e7160a08a01613c78565b925060c08901356001600160401b03811115613e8c57600080fd5b613e988b828c01613da7565b925050613ea760e08a01613ca6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613efb5783518252928401926001929092019190840190613edb565b509695505050505050565b600060208284031215613f1857600080fd5b5035919050565b60008060408385031215613f3257600080fd5b823591506020830135613f4481613c58565b809150509250929050565b60005b83811015613f6a578181015183820152602001613f52565b50506000910152565b60008151808452613f8b816020860160208601613f4f565b601f01601f19169290920160200192915050565b60208152600061099b6020830184613f73565b60008060008060008060c08789031215613fcb57600080fd5b8635613fd681613c58565b95506020870135613fe681613c58565b9450613ff460408801613c78565b9350606087013561400481613c58565b925061401260808801613c78565b915061402060a08801613ca6565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b8181101561407a5783516001600160a01b031683529284019291840191600101614055565b50909695505050505050565b6000806000806080858703121561409c57600080fd5b6140a585613c78565b93506140b360208601613ca6565b925060408501356140c381613c8c565b915060608501356001600160401b038111156140de57600080fd5b6140ea87828801613da7565b91505092959194509250565b60006001600160401b0382111561410f5761410f613b1b565b5060051b60200190565b6000602080838503121561412c57600080fd5b82356001600160401b038082111561414357600080fd5b818501915085601f83011261415757600080fd5b8135614165613dc6826140f6565b81815260059190911b8301840190848101908883111561418457600080fd5b8585015b838110156105fd578035858111156141a05760008081fd5b6141ae8b89838a0101613da7565b845250918601918601614188565b600080600080600060a086880312156141d457600080fd5b6141dd86613c78565b94506141eb60208701613ca6565b93506141f960408701613ca6565b9250606086013561420981613c8c565b915060808601356001600160401b0381111561422457600080fd5b61423088828901613da7565b9150509295509295909350565b6000806040838503121561425057600080fd5b50508035926020909101359150565b600082601f83011261427057600080fd5b81356020614280613dc6836140f6565b82815260059290921b8401810191818101908684111561429f57600080fd5b8286015b84811015613efb5780356001600160401b03808211156142c257600080fd5b9088019060a0828b03601f190112156142da57600080fd5b6142e2613b5a565b868301356142ef81613c8c565b815260408381013561430081613c58565b828901526060848101358284015260808501359083015260a08401358381111561432a5760008081fd5b8085019450508b603f85011261434257600092508283fd5b878401359250614354613dc6846140f6565b83815260069390931b8401810192888101908d8511156143745760008081fd5b948201945b848610156143cb5782868f0312156143915760008081fd5b614399613b7c565b6143a287613c78565b81528a8701358060040b81146143b85760008081fd5b818c015282529482019490890190614379565b60808401525050855250509183019183016142a3565b6000608082840312156143f357600080fd5b6143fb613b9e565b9050813561440881613c58565b8152602082013561441881613c8c565b602082015260408201356001600160401b038082111561443757600080fd5b61444385838601613da7565b6040840152606084013591508082111561445c57600080fd5b5061446984828501613da7565b60608301525092915050565b6000806040838503121561448857600080fd5b82356001600160401b038082111561449f57600080fd5b9084019060a082870312156144b357600080fd5b6144bb613b5a565b82356144c681613c58565b815260208301356144d681613c58565b602082015260408301356144e981613c58565b604082015260608301358281111561450057600080fd5b8301610180818903121561451357600080fd5b61451b613bc0565b61452482613c6d565b815261453260208301613c6d565b602082015261454360408301613c6d565b604082015261455460608301613c6d565b60608201526080820135608082015260a082013560a082015261457960c08301613c78565b60c082015261458a60e08301613c78565b60e082015261010061459d818401613c78565b908201526101206145af838201613c9b565b9082015261014082810135858111156145c757600080fd5b6145d38b82860161425f565b82840152505061016080830135858111156145ed57600080fd5b6145f98b828601613da7565b828401525050806060840152505061461360808401613c9b565b60808201529350602085013591508082111561462e57600080fd5b5061463b858286016143e1565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261468060a0840182613f73565b90506060840151601f1984830301608085015261469d8282613f73565b95945050505050565b600082601f8301126146b757600080fd5b813560206146c7613dc6836140f6565b82815260059290921b840181019181810190868411156146e657600080fd5b8286015b84811015613efb57803583529183019183016146ea565b600082601f83011261471257600080fd5b81356020614722613dc6836140f6565b82815260059290921b8401810191818101908684111561474157600080fd5b8286015b84811015613efb57803561475881613c58565b8352918301918301614745565b600082601f83011261477657600080fd5b81356020614786613dc6836140f6565b82815260059290921b840181019181810190868411156147a557600080fd5b8286015b84811015613efb5780356001600160401b03808211156147c857600080fd5b90880190601f196080838c03820112156147e157600080fd5b6147e9613b9e565b87840135838111156147fa57600080fd5b84016060818e038401121561480e57600080fd5b614816613be3565b92508881013561482581613c8c565b835260408181013561483681613c58565b848b015260608201358581111561484c57600080fd5b61485a8f8c838601016146a6565b828601525083835261486d818701613c9b565b8a840152606086013593508484111561488557600080fd5b6148938e8b86890101614701565b908301525060808401359150828211156148ac57600080fd5b6148ba8c89848701016146a6565b606082015286525050509183019183016147a9565b600082601f8301126148e057600080fd5b813560206148f0613dc6836140f6565b82815260059290921b8401810191818101908684111561490f57600080fd5b8286015b84811015613efb5780356001600160401b038111156149325760008081fd5b6149408986838b0101613da7565b845250918301918301614913565b600082601f83011261495f57600080fd5b8135602061496f613dc6836140f6565b82815260059290921b8401810191818101908684111561498e57600080fd5b8286015b84811015613efb5780356001600160401b03808211156149b25760008081fd5b9088019060a0828b03601f19018113156149cc5760008081fd5b6149d4613b5a565b87840135838111156149e65760008081fd5b6149f48d8a83880101614765565b8252506040614a04818601613c9b565b898301526060614a15818701613c6d565b82840152608091508186013585811115614a2f5760008081fd5b614a3d8f8c838a0101614701565b82850152505082850135925083831115614a575760008081fd5b614a658d8a858801016148cf565b908201528652505050918301918301614992565b600082601f830112614a8a57600080fd5b81356020614a9a613dc6836140f6565b82815260059290921b84018101918181019086841115614ab957600080fd5b8286015b84811015613efb578035614ad081613c8c565b8352918301918301614abd565b80356001600160401b0381168114611a6157600080fd5b600082601f830112614b0557600080fd5b81356020614b15613dc6836140f6565b82815260059290921b84018101918181019086841115614b3457600080fd5b8286015b84811015613efb5780356001600160401b0380821115614b585760008081fd5b90880190610160828b03601f1901811315614b735760008081fd5b614b7b613c05565b614b86888501613ca6565b81526040614b95818601613ca6565b898301526060614ba6818701613c9b565b8284015260809150614bb9828701613c78565b9083015260a0614bca868201613c9b565b8284015260c09150614bdd828701613c78565b9083015260e0614bee868201613c78565b828401526101009150614c02828701614add565b908301526101208581013585811115614c1b5760008081fd5b614c298f8c838a0101614701565b838501525061014091508186013585811115614c455760008081fd5b614c538f8c838a01016148cf565b828501525050614c64838601613c6d565b908201528652505050918301918301614b38565b600082601f830112614c8957600080fd5b81356020614c99613dc6836140f6565b82815260059290921b84018101918181019086841115614cb857600080fd5b8286015b84811015613efb5780356001600160401b0380821115614cdc5760008081fd5b9088019060a0828b03601f1901811315614cf65760008081fd5b614cfe613b5a565b614d09888501613c78565b815260408085013584811115614d1f5760008081fd5b614d2d8e8b83890101613da7565b8a8401525060608086013585811115614d465760008081fd5b614d548f8c838a0101613da7565b8385015250608091508186013585811115614d6f5760008081fd5b614d7d8f8c838a0101613da7565b828501525050614d8e838601613c9b565b908201528652505050918301918301614cbc565b60008060408385031215614db557600080fd5b614dbe83613c78565b915060208301356001600160401b0380821115614dda57600080fd5b908401906101608287031215614def57600080fd5b614df7613c05565b823582811115614e0657600080fd5b614e128882860161494e565b825250602083013582811115614e2757600080fd5b614e3388828601614a79565b602083015250604083013582811115614e4b57600080fd5b614e5788828601614af4565b604083015250606083013582811115614e6f57600080fd5b614e7b88828601614c78565b606083015250608083013582811115614e9357600080fd5b614e9f88828601614a79565b60808301525060a083013582811115614eb757600080fd5b614ec388828601614701565b60a08301525060c083013582811115614edb57600080fd5b614ee788828601614701565b60c083015250614ef960e08401613c78565b60e0820152610100614f0c818501613c78565b90820152610120614f1e848201613c9b565b908201526101408381013583811115614f3657600080fd5b614f4289828701613da7565b8284015250508093505050509250929050565b600060208284031215614f6757600080fd5b81356001600160401b0380821115614f7e57600080fd5b908301906101608286031215614f9357600080fd5b614f9b613c05565b614fa483613c6d565b8152614fb260208401613c6d565b6020820152614fc360408401613c78565b6040820152614fd460608401613ca6565b6060820152614fe560808401613ca6565b6080820152614ff660a08401613c9b565b60a082015261500760c08401613c6d565b60c082015261501860e08401613c78565b60e082015261010061502b818501613c6d565b9082015261012061503d848201613c9b565b90820152610140838101358381111561505557600080fd5b61506188828701613da7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156150c757603f198886030184526150b5858351613f73565b94509285019290850190600101615099565b5092979650505050505050565b6000602082840312156150e657600080fd5b81356001600160401b038111156150fc57600080fd5b611bd484828501614701565b60008060006060848603121561511d57600080fd5b61512684613c78565b925061513460208501613ca6565b9150604084013561514481613c8c565b809150509250925092565b60006020828403121561516157600080fd5b813561099b81613c58565b600081518084526020808501945080840160005b8381101561519f57815160ff1687529582019590820190600101615180565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561522157888303603f19018552815180518785526151f58886018261516c565b91890151858303868b015291905061520d818361516c565b9689019694505050908601906001016151d1565b509098975050505050505050565b60008251615241818460208701613f4f565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016152c0576152c0615298565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600081518084526020808501945080840160005b8381101561519f57815187529582019590820190600101615332565b63ffffffff86168152846020820152600060018060a01b03808616604084015260a0606084015261538260a084018661531e565b91508084166080840152509695505050505050565b63ffffffff8516815283602082015260018060a01b03831660408201526080606082015260006153ca608083018461531e565b9695505050505050565b6000602082840312156153e657600080fd5b5051919050565b602081526153ff60208201835161402c565b60006020830151615413604084018261402c565b50604083015163ffffffff8116606084015250606083015161ffff8116608084015250608083015161ffff811660a08401525060a083015160ff811660c08401525060c083015161546760e084018261402c565b5060e08301516101006154818185018363ffffffff169052565b84015190506101206154958482018361402c565b84015190506101406154ab8482018360ff169052565b840151610160848101529050611bd4610180840182613f73565b60006154d3613dc684613d80565b90508281528383830111156154e757600080fd5b61099b836020830184613f4f565b600082601f83011261550657600080fd5b81516020615516613dc6836140f6565b82815260059290921b8401810191818101908684111561553557600080fd5b8286015b84811015613efb5780516001600160401b038111156155585760008081fd5b8701603f8101891361556a5760008081fd5b61557b8986830151604084016154c5565b845250918301918301615539565b60006020828403121561559b57600080fd5b81516001600160401b038111156155b157600080fd5b611bd4848285016154f5565b6040815260006155d06040830185613f73565b90508260208301529392505050565b6000826155fc57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561046457610464615298565b8051611a6181613c58565b60006020828403121561563157600080fd5b815161099b81613c58565b63ffffffff93909316835261ffff91909116602083015260ff16604082015260600190565b8051611a6181613c8c565b600082601f83011261567d57600080fd5b8151602061568d613dc6836140f6565b82815260059290921b840181019181810190868411156156ac57600080fd5b8286015b84811015613efb57805183529183019183016156b0565b600082601f8301126156d857600080fd5b815160206156e8613dc6836140f6565b82815260059290921b8401810191818101908684111561570757600080fd5b8286015b84811015613efb57805161571e81613c58565b835291830191830161570b565b600082601f83011261573c57600080fd5b8151602061574c613dc6836140f6565b82815260059290921b8401810191818101908684111561576b57600080fd5b8286015b84811015613efb5780516001600160401b038082111561578e57600080fd5b90880190601f196080838c03820112156157a757600080fd5b6157af613b9e565b87840151838111156157c057600080fd5b84016060818e03840112156157d457600080fd5b6157dc613be3565b9250888101516157eb81613c8c565b83526040818101516157fc81613c58565b848b015260608201518581111561581257600080fd5b6158208f8c8386010161566c565b8286015250838352615833818701615661565b8a840152606086015193508484111561584b57600080fd5b6158598e8b868901016156c7565b9083015250608084015191508282111561587257600080fd5b6158808c898487010161566c565b6060820152865250505091830191830161576f565b600080604083850312156158a857600080fd5b825180151581146158b857600080fd5b60208401519092506001600160401b03808211156158d557600080fd5b9084019060a082870312156158e957600080fd5b6158f1613b5a565b82518281111561590057600080fd5b61590c8882860161572b565b82525061591b60208401615661565b602082015261592c60408401615614565b604082015260608301518281111561594357600080fd5b61594f888286016156c7565b60608301525060808301518281111561596757600080fd5b615973888286016154f5565b6080830152508093505050509250929050565b60006101408201905083825260018060a01b03808451166020840152806020850151166040840152506040830151606083015260608301516080830152608083015160a083015260a08301516159df60c084018261402c565b5060c083015163ffffffff811660e08401525060e0830151610100838101919091529092015161012090910152919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082018082111561046457610464615298565b60ff818116838216019081111561046457610464615298565b600060208284031215615ae857600080fd5b81516001600160401b03811115615afe57600080fd5b8201601f81018413615b0f57600080fd5b611bd4848251602084016154c5565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615b50816017850160208801613f4f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615b81816028840160208801613f4f565b01602801949350505050565b60ff828116828216039081111561046457610464615298565b808202811582820484141761046457610464615298565b61ffff81811683821601908082111561075857610758615298565b604081526000615beb6040830185613f73565b905060018060a01b03831660208301529392505050565b600081615c1157615c11615298565b506000190190565b634e487b7160e01b600052603160045260246000fdfe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d2d676574546f6b656e4272616e6368207461736b49642d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a26469706673582212208dc470251523200bfefc31a7fbebee576b1a4c7704dcb2cc67bc78f2806a1f7f64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101955760003560e01c8063715018a6116100ef578063af84b51f11610092578063af84b51f1461038d578063b41bd789146103ad578063b4b70352146103c0578063ca15c873146103d3578063d0d35b55146103e6578063d547741f1461040a578063f2fde38b1461041d578063f2fe4fa51461043057600080fd5b8063715018a6146102fc5780638129fc1c146103045780638da5cb5b1461030c5780639010d07c1461032c57806391d148541461033f57806395edcb0814610352578063a217fddf14610372578063a903620c1461037a57600080fd5b806301ffc9a71461019a5780631cc4f041146101c25780631eda6e4f146101d6578063248a9ca3146101f65780632f2ff15d1461022757806330adf81f1461023c57806334c76b25146102635780633644e5151461028057806336568abe146102895780634b2dbcb81461029c5780634b2e9b411461029c57806354fd4d50146102bc5780635790c294146102c357806362329cc5146102d65780636dabaf04146102e9575b600080fd5b6101ad6101a8366004613af1565b61043f565b60405190151581526020015b60405180910390f35b6101ad6101d0366004613cb8565b50600090565b6101e96101e4366004613dfd565b61046a565b6040516101b99190613eb6565b610219610204366004613f06565b60009081526098602052604090206001015490565b6040519081526020016101b9565b61023a610235366004613f1f565b61052c565b005b6102197f147ab4edb86d9069e61306bf07acb53c3b8f5d15d90d915258555c2ab11ea33981565b6040805160208101909152600081525b6040516101b99190613f9f565b61021960fc5481565b61023a610297366004613f1f565b610556565b6102af6102aa366004613fb2565b6105d9565b6040516101b99190614039565b6000610219565b61023a6102d1366004614086565b61060a565b6102af6102e4366004614119565b610682565b6101ad6102f73660046141bc565b61075f565b61023a610781565b61023a6107bc565b610314610974565b6040516001600160a01b0390911681526020016101b9565b61031461033a36600461423d565b610983565b6101ad61034d366004613f1f565b6109a2565b610365610360366004614475565b6109cd565b6040516101b99190614645565b610219600081565b61023a610388366004614da2565b61107f565b6103a061039b366004614f55565b6110f7565b6040516101b99190615072565b61023a6103bb3660046150d4565b61116e565b6101ad6103ce366004613cb8565b611218565b6102196103e1366004613f06565b61128b565b6102736103f4366004615108565b6040805160208101909152600081529392505050565b61023a610418366004613f1f565b6112a2565b61023a61042b36600461514f565b6112c7565b60606040516101b991906151aa565b60006001600160e01b03198216635a05180f60e01b1480610464575061046482611364565b92915050565b6040805160208101909152606081526104a16040518060600160405280602f8152602001615c83602f91398563ffffffff16611399565b60006104b333898989898e60006113de565b600081815260fd602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561051257602002820191906000526020600020905b8154815260200190600101908083116104fe575b5050509190925250919d9c50505050505050505050505050565b6000828152609860205260409020600101546105478161144d565b6105518383611457565b505050565b6001600160a01b03811633146105cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105d58282611479565b5050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b815250606581604051610642919061522f565b90815260405190819003602001902054336001600160a01b039091161461067b5760405162461bcd60e51b81526004016105c29061524b565b5050505050565b6060600082516001600160401b0381111561069f5761069f613b1b565b6040519080825280602002602001820160405280156106c8578160200160208202803683370190505b50905060005b81518110156107585760658482815181106106eb576106eb615282565b6020026020010151604051610700919061522f565b9081526040519081900360200190205482516001600160a01b039091169083908390811061073057610730615282565b6001600160a01b0390921660209283029190910190910152610751816152ae565b90506106ce565b5092915050565b600060ff8316610775576107758686868561149b565b50600195945050505050565b3361078a610974565b6001600160a01b0316146107b05760405162461bcd60e51b81526004016105c2906152c7565b6107ba6000611987565b565b60006107c860016119d9565b905080156107e0576000805461ff0019166101001790555b60408051808201909152601381527214dc185b92185b991b195c8818da185a5b9259606a1b602082015246906108169082611399565b604080518082018252601281527129ba30b5b2a832b936b4ba2430b7323632b960711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f22b589830ace2886a16af53b094ac409eaf35335a284206c1bdf637a66c4fccf818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018490523060a0808301919091528351808303909101815260c082018085528151919093012060fc8190556101008201909352601082526f2227a6a0a4a72fa9a2a820a920aa27a960811b60e09091015261092291611399565b61092a611a66565b508015610971576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b600082815260ca6020526040812061099b9083611a95565b9392505050565b60009182526098602090815260408084206001600160a01b0393909316845291905290205460ff1690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b815250606581604051610a1f919061522f565b90815260405190819003602001902054336001600160a01b0390911614610a585760405162461bcd60e51b81526004016105c29061524b565b610a926040518060400160405280601981526020017829ba30b5b2a832b936b4ba10383937b1b2b9b9903132b3b4b760391b815250611aa1565b3083526060840151600090610aa690611ae4565b9050600085606001516101000151610ac18760600151611af0565b610ace8860600151611b0f565b604051602001610ae0939291906152fc565b6040516020818303038152906040528051906020012090506000610b1c610b178460008a60600151611b349092919063ffffffff16565b611b8e565b90506000610b73338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610b60578c6060015160e00151610b6a565b8c6060015160c001515b8d5160006113de565b9050610b7f8883611bdc565b60001960ff831601610d55576000805b8960600151610140015151811015610bef57896060015161014001518181518110610bbc57610bbc615282565b602002602001015160400151600014610bdd5781610bd9816152ae565b9250505b80610be7816152ae565b915050610b8f565b506000816001600160401b03811115610c0a57610c0a613b1b565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b509050600260ff168a606001516101400151600081518110610c5757610c57615282565b60200260200101516000015160ff1603610cd85760005b8a60600151610140015151811015610cd6578a6060015161014001518181518110610c9b57610c9b615282565b602002602001015160400151828281518110610cb957610cb9615282565b602090810291909101015280610cce816152ae565b915050610c6e565b505b610100805460608c0151909101518b51604051634e5c49e360e11b81526001600160a01b0390931692639cb893c692610d1c9290918a91908790829060040161534e565b600060405180830381600087803b158015610d3657600080fd5b505af1158015610d4a573d6000803e3d6000fd5b505050505050611039565b60011960ff831601610e0557600088606001516101400151600081518110610d7f57610d7f615282565b602090810291909101015160600151610100548a51604051636ebf181b60e01b815260048101889052602481018490526001600160a01b0391821660448201529293501690636ebf181b90606401600060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b5050505050611039565b60021960ff831601610f70576060880151600090610e2e90610e2990876001611b34565b611c38565b9050600081516001600160401b03811115610e4b57610e4b613b1b565b604051908082528060200260200182016040528015610e74578160200160208202803683370190505b50905060005b8151811015610ed457610ea5838281518110610e9857610e98615282565b6020026020010151611b8e565b828281518110610eb757610eb7615282565b602090810291909101015280610ecc816152ae565b915050610e7a565b50610100805460608c0151909101518b51604051637fb103ed60e01b81526001600160a01b0390931692637fb103ed92610f179290918a91908790600401615397565b6020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a91906153d4565b50610f688a84868489611d41565b505050611039565b60031960ff831601610fa257600080610f89858b611f02565b91509150610f9b8a848685858a612360565b5050611039565b60041960ff831601611039576060880151600090610fc690610b1790876001611b34565b610100548a5160405163468ed88960e01b8152600481018490526001600160a01b03918216602482015260448101889052929350169063468ed88990606401600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b50505050505b60ff82166001148061104e575060ff82166002145b8061105c575060ff82166005145b1561106c5761106c88828461255d565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516110be919061522f565b90815260405190819003602001902054336001600160a01b03909116146105515760405162461bcd60e51b81526004016105c29061524b565b6101005460405163af84b51f60e01b81526060916001600160a01b03169063af84b51f906111299085906004016153ed565b600060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104649190810190615589565b33611177610974565b6001600160a01b03161461119d5760405162461bcd60e51b81526004016105c2906152c7565b6111a6816125c6565b604080518082018252601b81527a29aa20a5a2afa822a926a4aa2fa420a7222622a92fa422a62822a960291b602082015290516065916111e59161522f565b9081526040519081900360200190205461010080546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b815250606581604051611249919061522f565b90815260405190819003602001902054336001600160a01b03909116146112825760405162461bcd60e51b81526004016105c29061524b565b50600092915050565b600081815260ca60205260408120610464906126e8565b6000828152609860205260409020600101546112bd8161144d565b6105518383611479565b336112d0610974565b6001600160a01b0316146112f65760405162461bcd60e51b81526004016105c2906152c7565b6001600160a01b03811661135b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c2565b61097181611987565b60006001600160e01b03198216637965db0b60e01b148061046457506301ffc9a760e01b6001600160e01b0319831614610464565b6105d582826040516024016113af9291906155bd565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b1790526126f2565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b61097181336126fb565b611461828261275f565b600082815260ca6020526040902061055190826127e5565b61148382826127fa565b600082815260ca602052604090206105519082612861565b6114ce604051806040016040528060128152602001712fbab83230ba329030b933b9903132b3b4b760711b815250611aa1565b60006114d982612876565b905080516000036114ea5750611981565b6000858585604051602001611501939291906152fc565b604051602081830303815290604052805190602001209050620151804261152891906155df565b6115329042615601565b600082815260fe6020908152604080832063ffffffff94909416909355825161012081018452828152908101829052918201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261159b846000612886565b8160e0018181525050600080336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160b919061561f565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c919061561f565b6001600160a01b0316632c34025e8a8a60026040518463ffffffff1660e01b815260040161169c9392919061563c565b600060405180830381865afa1580156116b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116e19190810190615895565b9150915081156117245780515115611724578051805160009061170657611706615282565b602090810291909101810151518101516001600160a01b0316908401525b336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611764573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611788919061561f565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e9919061561f565b6001600160a01b0316632c34025e8a8a60016040518463ffffffff1660e01b81526004016118199392919061563c565b600060405180830381865afa158015611836573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261185e9190810190615895565b9092509050811561189f578051511561189f578051805160009061188457611884615282565b6020908102919091018101515101516001600160a01b031683525b6118aa8660016128c4565b6001600160a01b0390811660a0850152610100546040516305d1905360e11b8152911690630ba320a6906118e49087908790600401615986565b600060405180830381600087803b1580156118fe57600080fd5b505af1158015611912573d6000803e3d6000fd5b5050505060006119218561290f565b905061192d8186612962565b61193b858560a001516129ad565b611949818560a001516129ad565b61197a6040518060400160405280601081526020016f17dd5c19185d1948185c99dcc8195b9960821b815250611aa1565b5050505050505b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611a20578160ff1660011480156119fc5750303b155b611a185760405162461bcd60e51b81526004016105c290615a11565b506000919050565b60005460ff808416911610611a475760405162461bcd60e51b81526004016105c290615a11565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff16611a8d5760405162461bcd60e51b81526004016105c290615a5f565b6107ba6129b7565b600061099b83836129e7565b61097181604051602401611ab59190613f9f565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526126f2565b60606104648230612a11565b60006104648260a00151601060006008611b0a9190615aaa565b612ab6565b60006104648260a00151601060006008611b299190615aaa565b611b0a906010615aaa565b611b3c6139ee565b611b6b83611b4b846001615abd565b60ff1681518110611b5e57611b5e615282565b6020026020010151611c38565b600281518110611b7d57611b7d615282565b602002602001015190509392505050565b805160009015801590611ba357508151602110155b611bac57600080fd5b600080611bb884612ad5565b815191935091506020821015611bd45760208290036101000a90045b949350505050565b6000611beb8360600151612b1c565b90508060ff168260ff16146105515760405162461bcd60e51b81526020600482015260136024820152720c6dac840c4e4c2dcc6d040dad2e6dac2e8c6d606b1b60448201526064016105c2565b6060611c4382612b41565b611c4c57600080fd5b6000611c5783612b7c565b90506000816001600160401b03811115611c7357611c73613b1b565b604051908082528060200260200182016040528015611cac57816020015b611c996139ee565b815260200190600190039081611c915790505b5090506000611cbe8560200151612c01565b8560200151611ccd9190615aaa565b90506000805b84811015611d3657611ce483612c7c565b9150604051806040016040528083815260200184815250848281518110611d0d57611d0d615282565b6020908102919091010152611d228284615aaa565b925080611d2e816152ae565b915050611cd3565b509195945050505050565b6000611d79604051806040016040528060158152602001742fb83937b1b2b9b9aab739ba30b5b2903132b3b4b760591b815250611aa1565b6000611d83612d20565b9050611d9b6040518060200160405280606081525090565b6001606083015260ff86168252610140820185905284516001600160401b03811115611dc957611dc9613b1b565b604051908082528060200260200182016040528015611df2578160200160208202803683370190505b50610160830152845160ff1661012083015284516001600160401b03811115611e1d57611e1d613b1b565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b5061018083015260005b82610180015151811015611e9a57808361018001518281518110611e7657611e76615282565b60ff9092166020928302919091019091015280611e92816152ae565b915050611e50565b5060696040830152611eac8183612d67565b600087815260fd60209081526040909120825180518493611ed1928492910190613a08565b50905050816101600151600081518110611eed57611eed615282565b60200260200101519250505095945050505050565b6000806000611f148460600151611ae4565b9050600080611f36610b178460018960600151611b349092919063ffffffff16565b90506000611f57610b178560028a60600151611b349092919063ffffffff16565b90506000611f78610b178660038b60600151611b349092919063ffffffff16565b60408051808201909152601a8152790eed2e8d0c8e4c2ee84f2a6d2ce40eed2e8d0c8e4c2ee90c2e6d60331b6020820152909150611fb69082611399565b600081815260ff602081905260409091205416156120045760405162461bcd60e51b815260206004820152600b60248201526a686173682065786973742160a81b60448201526064016105c2565b600081815260ff60205260408120805460ff19166001179055606089015161203290610b1790886004611b34565b9050804211156120785760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c9948195e1c1a5c9959607a1b60448201526064016105c2565b60fc548951604080517f147ab4edb86d9069e61306bf07acb53c3b8f5d15d90d915258555c2ab11ea3396020808301919091526001600160a01b0390931681830152606081018890526080810187905260a0810186905260c08082018690528251808303909101815260e082019092528151919092012061190160f01b610100830152610102820192909252610122810191909152610142016040516020818303038152906040528051906020012094505050505060008061214d610b178560058a60600151611b349092919063ffffffff16565b9050600061216e610b178660068b60600151611b349092919063ffffffff16565b606089015190915060009061218990610b1790886007611b34565b60408051600081526020810180835288905260ff861691810191909152606081018490526080810182905290915060019060a0016020604051602081039080840390855afa1580156121df573d6000803e3d6000fd5b50505060206040510351935050505061221f6040518060400160405280600f81526020016e7265636f766572206164647265737360881b8152508261335f565b61223161222b8861290f565b826109a2565b6122735760405162461bcd60e51b815260206004820152601360248201527239b4b3b732b91030b1b1b2b9b99032b93937b960691b60448201526064016105c2565b50606085015160009061228c90610b1790856001611b34565b905060006122ad610b178560028a60600151611b349092919063ffffffff16565b6101005460608901519192506001600160a01b031690632d319e68908a906122db90610b1790896003611b34565b8a5160405160e085901b6001600160e01b0319168152600481019390935260248301919091526001600160a01b03166044820152606481018590526084810184905260a401600060405180830381600087803b15801561233a57600080fd5b505af115801561234e573d6000803e3d6000fd5b50939a92995091975050505050505050565b612394604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b815250611aa1565b6123c9604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525084611399565b6123fe604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525083611399565b6000612408612d20565b90506124206040518060200160405280606081525090565b6001606083015260ff8616825284156124d55760408051600180825281830190925290602080830190803683375050506101408301819052805186919060009061246c5761246c615282565b60209081029190910101526067604083015283156124d0576040805160018082528183019092529060208083019080368337505050610160830181905280518591906000906124bd576124bd615282565b6020908102919091010152606860408301525b612521565b60408051600180825281830190925290602080830190803683375050506101608301819052805185919060009061250e5761250e615282565b6020908102919091010152606660408301525b61252b8183612d67565b600087815260fd60209081526040909120825180518493612550928492910190613a08565b5050505050505050505050565b6000612567612d20565b905061257f6040518060200160405280606081525090565b60656040830152600160208301526125978183612d67565b600084815260fd602090815260409091208251805184936125bc928492910190613a08565b5050505050505050565b336125cf610974565b6001600160a01b0316146125f55760405162461bcd60e51b81526004016105c2906152c7565b60005b81518110156105d55781818151811061261357612613615282565b6020026020010151606583838151811061262f5761262f615282565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269c9190810190615ad6565b6040516126a9919061522f565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556126e1816152ae565b90506125f8565b6000610464825490565b610971816133a4565b61270582826109a2565b6105d55761271d816001600160a01b031660146133c5565b6127288360206133c5565b604051602001612739929190615b1e565b60408051601f198184030181529082905262461bcd60e51b82526105c291600401613f9f565b61276982826109a2565b6105d55760008281526098602090815260408083206001600160a01b03851684529091529020805460ff191660011790556127a13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061099b836001600160a01b038416613560565b61280482826109a2565b156105d55760008281526098602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061099b836001600160a01b0384166135af565b6060600061099b610e29846136a2565b600080612895610e29856136a2565b9050611bd46128b2828560ff1681518110611b5e57611b5e615282565b600281518110610e9857610e98615282565b6000806128d3610e29856136a2565b9050611bd46128f0828560ff1681518110611b5e57611b5e615282565b60028151811061290257612902615282565b60200260200101516136c8565b600081604051602001612945918152604060208201819052600990820152685349474e5f524f4c4560b81b606082015260800190565b604051602081830303815290604052805190602001209050919050565b600082815260986020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6105d58282611457565b600054610100900460ff166129de5760405162461bcd60e51b81526004016105c290615a5f565b6107ba33611987565b60008260000182815481106129fe576129fe615282565b9060005260206000200154905092915050565b60606000612a26610e298561016001516136a2565b905060005b8151811015612aab576000612a60612a4e848481518110611b5e57611b5e615282565b60008151811061290257612902615282565b9050846001600160a01b0316816001600160a01b031603612a9a57612a90838381518110611b5e57611b5e615282565b9350505050610464565b50612aa4816152ae565b9050612a2b565b506060949350505050565b91821c91600080612aca600180861b615601565b909416949350505050565b6000806000612ae78460200151612c01565b90506000818560200151612afb9190615aaa565b90506000828660000151612b0f9190615601565b9196919550909350505050565b60006104648260a00151600860006008612b369190615aaa565b611b29906010615aaa565b80516000908103612b5457506000919050565b6020820151805160001a9060c0821015612b72575060009392505050565b5060019392505050565b80516000908103612b8f57506000919050565b600080612b9f8460200151612c01565b8460200151612bae9190615aaa565b9050600084600001518560200151612bc69190615aaa565b90505b80821015612bf857612bda82612c7c565b612be49083615aaa565b915082612bf0816152ae565b935050612bc9565b50909392505050565b8051600090811a6080811015612c1a5750600092915050565b60b8811080612c35575060c08110801590612c35575060f881105b15612c435750600192915050565b60c0811015612c7057612c58600160b8615b8d565b612c659060ff1682615601565b61099b906001615aaa565b612c58600160f8615b8d565b80516000908190811a6080811015612c975760019150610758565b60b8811015612cbd57612cab608082615601565b612cb6906001615aaa565b9150610758565b60c0811015612cea5760b78103600185019450806020036101000a85510460018201810193505050610758565b60f8811015612cfe57612cab60c082615601565b60019390930151602084900360f7016101000a900490920160f5190192915050565b612d28613a53565b612d30613a53565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612d825780612d7e816152ae565b9150505b8160e0015161271014612d9d5780612d99816152ae565b9150505b81610100015161271014612db95780612db5816152ae565b9150505b61014082015151151580612dd257506101608201515115155b80612de257506101a08201515115155b15612e54576000826101600151518361014001515111612e2757826101a00151518361016001515111612e1b57826101a0015151612e2f565b82610160015151612e2f565b826101400151515b9050612e3c816004615ba6565b612e469083615aaa565b60ff90911661012084015290505b612e7e6040518060600160405280602e8152602001615c30602e913983610120015160ff16611399565b806001600160401b03811115612e9657612e96613b1b565b604051908082528060200260200182016040528015612ebf578160200160208202803683370190505b5083528151612ecf9084906136e2565b612edd83836020015161373a565b612eeb83836060015161377b565b612ef98383604001516137ca565b612f088383610120015161380e565b612f29604051806060016040528060258152602001615c5e60259139611aa1565b60008060019050836080015162ffffff1661271014612f5e57612f5085856080015161389f565b612f5b600183615bbd565b91505b8360a0015163ffffffff1661271014612f8d57612f7f858560a00151613906565b612f8a600283615bbd565b91505b60c084015115612fd35760c0840151855182612fa8816152ae565b935081518110612fba57612fba615282565b6020908102919091010152612fd0600483615bbd565b91505b8360e001516127101461301c5760e0840151855182612ff1816152ae565b93508151811061300357613003615282565b6020908102919091010152613019600883615bbd565b91505b836101000151612710146130675761010084015185518261303c816152ae565b93508151811061304e5761304e615282565b6020908102919091010152613064601083615bbd565b91505b61012084015160ff16156133555760005b84610120015160ff16811015613323576000856101400151511180156130a357508461014001515181105b156130fa5784610140015181815181106130bf576130bf615282565b6020026020010151866000015183806130d7906152ae565b9450815181106130e9576130e9615282565b602002602001018181525050613128565b855160009083613109816152ae565b94508151811061311b5761311b615282565b6020026020010181815250505b60008561016001515111801561314357508461016001515181105b1561319a57846101600151818151811061315f5761315f615282565b602002602001015186600001518380613177906152ae565b94508151811061318957613189615282565b6020026020010181815250506131c8565b8551600090836131a9816152ae565b9450815181106131bb576131bb615282565b6020026020010181815250505b6000856101800151511180156131e357508461018001515181105b1561323d5784610180015181815181106131ff576131ff615282565b602002602001015160ff168660000151838061321a906152ae565b94508151811061322c5761322c615282565b60200260200101818152505061326a565b855181908361324b816152ae565b94508151811061325d5761325d615282565b6020026020010181815250505b6000856101a00151511180156132855750846101a001515181105b156132e557846101a0015181815181106132a1576132a1615282565b60200260200101516001600160a01b0316866000015183806132c2906152ae565b9450815181106132d4576132d4615282565b602002602001018181525050613313565b8551600090836132f4816152ae565b94508151811061330657613306615282565b6020026020010181815250505b61331c816152ae565b9050613078565b5061332f602083615bbd565b9150613355604051806080016040528060448152602001615cb260449139865151611399565b61067b8583613979565b6105d58282604051602401613375929190615bd8565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526126f2565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b606060006133d4836002615ba6565b6133df906002615aaa565b6001600160401b038111156133f6576133f6613b1b565b6040519080825280601f01601f191660200182016040528015613420576020820181803683370190505b509050600360fc1b8160008151811061343b5761343b615282565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061346a5761346a615282565b60200101906001600160f81b031916908160001a905350600061348e846002615ba6565b613499906001615aaa565b90505b6001811115613511576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134cd576134cd615282565b1a60f81b8282815181106134e3576134e3615282565b60200101906001600160f81b031916908160001a90535060049490941c9361350a81615c02565b905061349c565b50831561099b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105c2565b60008181526001830160205260408120546135a757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610464565b506000610464565b600081815260018301602052604081205480156136985760006135d3600183615601565b85549091506000906135e790600190615601565b905081811461364c57600086600001828154811061360757613607615282565b906000526020600020015490508087600001848154811061362a5761362a615282565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061365d5761365d615c19565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610464565b6000915050610464565b6136aa6139ee565b50604080518082019091528151815260209182019181019190915290565b80516000906015146136d957600080fd5b61046482611b8e565b61371782600001516000815181106136fc576136fc615282565b60200260200101518260ff16600860ff16600060ff166139c9565b8251805160009061372a5761372a615282565b6020026020010181815250505050565b613717826000015160008151811061375457613754615282565b60200260200101518260ff16600460ff16600060086137739190615abd565b60ff166139c9565b613717826000015160008151811061379557613795615282565b60200260200101518260ff16600460ff16600060086137b49190615abd565b6137bf906004615abd565b613773906008615abd565b61371782600001516000815181106137e4576137e4615282565b60200260200101518260ff16600860ff16600060086138039190615abd565b613773906004615abd565b613717826000015160008151811061382857613828615282565b60200260200101518260ff16600860ff16600060086138479190615abd565b613852906004615abd565b61385d906008615abd565b613868906004615abd565b613873906010615abd565b61387e906018615abd565b613889906020615abd565b613894906020615abd565b613773906020615abd565b61371782600001516000815181106138b9576138b9615282565b60200260200101518262ffffff16601860ff16600060086138da9190615abd565b6138e5906004615abd565b6138f0906008615abd565b6138fb906004615abd565b613773906010615abd565b613717826000015160008151811061392057613920615282565b60200260200101518263ffffffff16602060ff16600060086139429190615abd565b61394d906004615abd565b613958906008615abd565b613963906004615abd565b61396e906010615abd565b613773906018615abd565b613717826000015160008151811061399357613993615282565b60200260200101518261ffff16601060ff16600060086139b39190615abd565b6139be906004615abd565b613803906008615abd565b600083821b81836139dd600180881b615601565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215613a43579160200282015b82811115613a43578251825591602001919060010190613a28565b50613a4f929150613adc565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115613a4f5760008155600101613add565b600060208284031215613b0357600080fd5b81356001600160e01b03198116811461099b57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613b5457613b54613b1b565b60405290565b60405160a081016001600160401b0381118282101715613b5457613b54613b1b565b604080519081016001600160401b0381118282101715613b5457613b54613b1b565b604051608081016001600160401b0381118282101715613b5457613b54613b1b565b60405161018081016001600160401b0381118282101715613b5457613b54613b1b565b604051606081016001600160401b0381118282101715613b5457613b54613b1b565b60405161016081016001600160401b0381118282101715613b5457613b54613b1b565b604051601f8201601f191681016001600160401b0381118282101715613c5057613c50613b1b565b604052919050565b6001600160a01b038116811461097157600080fd5b8035611a6181613c58565b803563ffffffff81168114611a6157600080fd5b60ff8116811461097157600080fd5b8035611a6181613c8c565b803561ffff81168114611a6157600080fd5b60006101408284031215613ccb57600080fd5b613cd3613b31565b613cdc83613c6d565b8152613cea60208401613c6d565b6020820152613cfb60408401613c6d565b6040820152613d0c60608401613c78565b6060820152613d1d60808401613c78565b6080820152613d2e60a08401613c6d565b60a0820152613d3f60c08401613c9b565b60c0820152613d5060e08401613ca6565b60e0820152610100613d63818501613c9b565b90820152610120613d75848201613c9b565b908201529392505050565b60006001600160401b03821115613d9957613d99613b1b565b50601f01601f191660200190565b600082601f830112613db857600080fd5b8135613dcb613dc682613d80565b613c28565b818152846020838601011115613de057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215613e1a57600080fd5b8835613e2581613c58565b97506020890135613e3581613c58565b96506040890135613e4581613c58565b9550613e5360608a01613c78565b94506080890135613e6381613c58565b9350613e7160a08a01613c78565b925060c08901356001600160401b03811115613e8c57600080fd5b613e988b828c01613da7565b925050613ea760e08a01613ca6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613efb5783518252928401926001929092019190840190613edb565b509695505050505050565b600060208284031215613f1857600080fd5b5035919050565b60008060408385031215613f3257600080fd5b823591506020830135613f4481613c58565b809150509250929050565b60005b83811015613f6a578181015183820152602001613f52565b50506000910152565b60008151808452613f8b816020860160208601613f4f565b601f01601f19169290920160200192915050565b60208152600061099b6020830184613f73565b60008060008060008060c08789031215613fcb57600080fd5b8635613fd681613c58565b95506020870135613fe681613c58565b9450613ff460408801613c78565b9350606087013561400481613c58565b925061401260808801613c78565b915061402060a08801613ca6565b90509295509295509295565b6001600160a01b03169052565b6020808252825182820181905260009190848201906040850190845b8181101561407a5783516001600160a01b031683529284019291840191600101614055565b50909695505050505050565b6000806000806080858703121561409c57600080fd5b6140a585613c78565b93506140b360208601613ca6565b925060408501356140c381613c8c565b915060608501356001600160401b038111156140de57600080fd5b6140ea87828801613da7565b91505092959194509250565b60006001600160401b0382111561410f5761410f613b1b565b5060051b60200190565b6000602080838503121561412c57600080fd5b82356001600160401b038082111561414357600080fd5b818501915085601f83011261415757600080fd5b8135614165613dc6826140f6565b81815260059190911b8301840190848101908883111561418457600080fd5b8585015b838110156105fd578035858111156141a05760008081fd5b6141ae8b89838a0101613da7565b845250918601918601614188565b600080600080600060a086880312156141d457600080fd5b6141dd86613c78565b94506141eb60208701613ca6565b93506141f960408701613ca6565b9250606086013561420981613c8c565b915060808601356001600160401b0381111561422457600080fd5b61423088828901613da7565b9150509295509295909350565b6000806040838503121561425057600080fd5b50508035926020909101359150565b600082601f83011261427057600080fd5b81356020614280613dc6836140f6565b82815260059290921b8401810191818101908684111561429f57600080fd5b8286015b84811015613efb5780356001600160401b03808211156142c257600080fd5b9088019060a0828b03601f190112156142da57600080fd5b6142e2613b5a565b868301356142ef81613c8c565b815260408381013561430081613c58565b828901526060848101358284015260808501359083015260a08401358381111561432a5760008081fd5b8085019450508b603f85011261434257600092508283fd5b878401359250614354613dc6846140f6565b83815260069390931b8401810192888101908d8511156143745760008081fd5b948201945b848610156143cb5782868f0312156143915760008081fd5b614399613b7c565b6143a287613c78565b81528a8701358060040b81146143b85760008081fd5b818c015282529482019490890190614379565b60808401525050855250509183019183016142a3565b6000608082840312156143f357600080fd5b6143fb613b9e565b9050813561440881613c58565b8152602082013561441881613c8c565b602082015260408201356001600160401b038082111561443757600080fd5b61444385838601613da7565b6040840152606084013591508082111561445c57600080fd5b5061446984828501613da7565b60608301525092915050565b6000806040838503121561448857600080fd5b82356001600160401b038082111561449f57600080fd5b9084019060a082870312156144b357600080fd5b6144bb613b5a565b82356144c681613c58565b815260208301356144d681613c58565b602082015260408301356144e981613c58565b604082015260608301358281111561450057600080fd5b8301610180818903121561451357600080fd5b61451b613bc0565b61452482613c6d565b815261453260208301613c6d565b602082015261454360408301613c6d565b604082015261455460608301613c6d565b60608201526080820135608082015260a082013560a082015261457960c08301613c78565b60c082015261458a60e08301613c78565b60e082015261010061459d818401613c78565b908201526101206145af838201613c9b565b9082015261014082810135858111156145c757600080fd5b6145d38b82860161425f565b82840152505061016080830135858111156145ed57600080fd5b6145f98b828601613da7565b828401525050806060840152505061461360808401613c9b565b60808201529350602085013591508082111561462e57600080fd5b5061463b858286016143e1565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261468060a0840182613f73565b90506060840151601f1984830301608085015261469d8282613f73565b95945050505050565b600082601f8301126146b757600080fd5b813560206146c7613dc6836140f6565b82815260059290921b840181019181810190868411156146e657600080fd5b8286015b84811015613efb57803583529183019183016146ea565b600082601f83011261471257600080fd5b81356020614722613dc6836140f6565b82815260059290921b8401810191818101908684111561474157600080fd5b8286015b84811015613efb57803561475881613c58565b8352918301918301614745565b600082601f83011261477657600080fd5b81356020614786613dc6836140f6565b82815260059290921b840181019181810190868411156147a557600080fd5b8286015b84811015613efb5780356001600160401b03808211156147c857600080fd5b90880190601f196080838c03820112156147e157600080fd5b6147e9613b9e565b87840135838111156147fa57600080fd5b84016060818e038401121561480e57600080fd5b614816613be3565b92508881013561482581613c8c565b835260408181013561483681613c58565b848b015260608201358581111561484c57600080fd5b61485a8f8c838601016146a6565b828601525083835261486d818701613c9b565b8a840152606086013593508484111561488557600080fd5b6148938e8b86890101614701565b908301525060808401359150828211156148ac57600080fd5b6148ba8c89848701016146a6565b606082015286525050509183019183016147a9565b600082601f8301126148e057600080fd5b813560206148f0613dc6836140f6565b82815260059290921b8401810191818101908684111561490f57600080fd5b8286015b84811015613efb5780356001600160401b038111156149325760008081fd5b6149408986838b0101613da7565b845250918301918301614913565b600082601f83011261495f57600080fd5b8135602061496f613dc6836140f6565b82815260059290921b8401810191818101908684111561498e57600080fd5b8286015b84811015613efb5780356001600160401b03808211156149b25760008081fd5b9088019060a0828b03601f19018113156149cc5760008081fd5b6149d4613b5a565b87840135838111156149e65760008081fd5b6149f48d8a83880101614765565b8252506040614a04818601613c9b565b898301526060614a15818701613c6d565b82840152608091508186013585811115614a2f5760008081fd5b614a3d8f8c838a0101614701565b82850152505082850135925083831115614a575760008081fd5b614a658d8a858801016148cf565b908201528652505050918301918301614992565b600082601f830112614a8a57600080fd5b81356020614a9a613dc6836140f6565b82815260059290921b84018101918181019086841115614ab957600080fd5b8286015b84811015613efb578035614ad081613c8c565b8352918301918301614abd565b80356001600160401b0381168114611a6157600080fd5b600082601f830112614b0557600080fd5b81356020614b15613dc6836140f6565b82815260059290921b84018101918181019086841115614b3457600080fd5b8286015b84811015613efb5780356001600160401b0380821115614b585760008081fd5b90880190610160828b03601f1901811315614b735760008081fd5b614b7b613c05565b614b86888501613ca6565b81526040614b95818601613ca6565b898301526060614ba6818701613c9b565b8284015260809150614bb9828701613c78565b9083015260a0614bca868201613c9b565b8284015260c09150614bdd828701613c78565b9083015260e0614bee868201613c78565b828401526101009150614c02828701614add565b908301526101208581013585811115614c1b5760008081fd5b614c298f8c838a0101614701565b838501525061014091508186013585811115614c455760008081fd5b614c538f8c838a01016148cf565b828501525050614c64838601613c6d565b908201528652505050918301918301614b38565b600082601f830112614c8957600080fd5b81356020614c99613dc6836140f6565b82815260059290921b84018101918181019086841115614cb857600080fd5b8286015b84811015613efb5780356001600160401b0380821115614cdc5760008081fd5b9088019060a0828b03601f1901811315614cf65760008081fd5b614cfe613b5a565b614d09888501613c78565b815260408085013584811115614d1f5760008081fd5b614d2d8e8b83890101613da7565b8a8401525060608086013585811115614d465760008081fd5b614d548f8c838a0101613da7565b8385015250608091508186013585811115614d6f5760008081fd5b614d7d8f8c838a0101613da7565b828501525050614d8e838601613c9b565b908201528652505050918301918301614cbc565b60008060408385031215614db557600080fd5b614dbe83613c78565b915060208301356001600160401b0380821115614dda57600080fd5b908401906101608287031215614def57600080fd5b614df7613c05565b823582811115614e0657600080fd5b614e128882860161494e565b825250602083013582811115614e2757600080fd5b614e3388828601614a79565b602083015250604083013582811115614e4b57600080fd5b614e5788828601614af4565b604083015250606083013582811115614e6f57600080fd5b614e7b88828601614c78565b606083015250608083013582811115614e9357600080fd5b614e9f88828601614a79565b60808301525060a083013582811115614eb757600080fd5b614ec388828601614701565b60a08301525060c083013582811115614edb57600080fd5b614ee788828601614701565b60c083015250614ef960e08401613c78565b60e0820152610100614f0c818501613c78565b90820152610120614f1e848201613c9b565b908201526101408381013583811115614f3657600080fd5b614f4289828701613da7565b8284015250508093505050509250929050565b600060208284031215614f6757600080fd5b81356001600160401b0380821115614f7e57600080fd5b908301906101608286031215614f9357600080fd5b614f9b613c05565b614fa483613c6d565b8152614fb260208401613c6d565b6020820152614fc360408401613c78565b6040820152614fd460608401613ca6565b6060820152614fe560808401613ca6565b6080820152614ff660a08401613c9b565b60a082015261500760c08401613c6d565b60c082015261501860e08401613c78565b60e082015261010061502b818501613c6d565b9082015261012061503d848201613c9b565b90820152610140838101358381111561505557600080fd5b61506188828701613da7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156150c757603f198886030184526150b5858351613f73565b94509285019290850190600101615099565b5092979650505050505050565b6000602082840312156150e657600080fd5b81356001600160401b038111156150fc57600080fd5b611bd484828501614701565b60008060006060848603121561511d57600080fd5b61512684613c78565b925061513460208501613ca6565b9150604084013561514481613c8c565b809150509250925092565b60006020828403121561516157600080fd5b813561099b81613c58565b600081518084526020808501945080840160005b8381101561519f57815160ff1687529582019590820190600101615180565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561522157888303603f19018552815180518785526151f58886018261516c565b91890151858303868b015291905061520d818361516c565b9689019694505050908601906001016151d1565b509098975050505050505050565b60008251615241818460208701613f4f565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016152c0576152c0615298565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600081518084526020808501945080840160005b8381101561519f57815187529582019590820190600101615332565b63ffffffff86168152846020820152600060018060a01b03808616604084015260a0606084015261538260a084018661531e565b91508084166080840152509695505050505050565b63ffffffff8516815283602082015260018060a01b03831660408201526080606082015260006153ca608083018461531e565b9695505050505050565b6000602082840312156153e657600080fd5b5051919050565b602081526153ff60208201835161402c565b60006020830151615413604084018261402c565b50604083015163ffffffff8116606084015250606083015161ffff8116608084015250608083015161ffff811660a08401525060a083015160ff811660c08401525060c083015161546760e084018261402c565b5060e08301516101006154818185018363ffffffff169052565b84015190506101206154958482018361402c565b84015190506101406154ab8482018360ff169052565b840151610160848101529050611bd4610180840182613f73565b60006154d3613dc684613d80565b90508281528383830111156154e757600080fd5b61099b836020830184613f4f565b600082601f83011261550657600080fd5b81516020615516613dc6836140f6565b82815260059290921b8401810191818101908684111561553557600080fd5b8286015b84811015613efb5780516001600160401b038111156155585760008081fd5b8701603f8101891361556a5760008081fd5b61557b8986830151604084016154c5565b845250918301918301615539565b60006020828403121561559b57600080fd5b81516001600160401b038111156155b157600080fd5b611bd4848285016154f5565b6040815260006155d06040830185613f73565b90508260208301529392505050565b6000826155fc57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561046457610464615298565b8051611a6181613c58565b60006020828403121561563157600080fd5b815161099b81613c58565b63ffffffff93909316835261ffff91909116602083015260ff16604082015260600190565b8051611a6181613c8c565b600082601f83011261567d57600080fd5b8151602061568d613dc6836140f6565b82815260059290921b840181019181810190868411156156ac57600080fd5b8286015b84811015613efb57805183529183019183016156b0565b600082601f8301126156d857600080fd5b815160206156e8613dc6836140f6565b82815260059290921b8401810191818101908684111561570757600080fd5b8286015b84811015613efb57805161571e81613c58565b835291830191830161570b565b600082601f83011261573c57600080fd5b8151602061574c613dc6836140f6565b82815260059290921b8401810191818101908684111561576b57600080fd5b8286015b84811015613efb5780516001600160401b038082111561578e57600080fd5b90880190601f196080838c03820112156157a757600080fd5b6157af613b9e565b87840151838111156157c057600080fd5b84016060818e03840112156157d457600080fd5b6157dc613be3565b9250888101516157eb81613c8c565b83526040818101516157fc81613c58565b848b015260608201518581111561581257600080fd5b6158208f8c8386010161566c565b8286015250838352615833818701615661565b8a840152606086015193508484111561584b57600080fd5b6158598e8b868901016156c7565b9083015250608084015191508282111561587257600080fd5b6158808c898487010161566c565b6060820152865250505091830191830161576f565b600080604083850312156158a857600080fd5b825180151581146158b857600080fd5b60208401519092506001600160401b03808211156158d557600080fd5b9084019060a082870312156158e957600080fd5b6158f1613b5a565b82518281111561590057600080fd5b61590c8882860161572b565b82525061591b60208401615661565b602082015261592c60408401615614565b604082015260608301518281111561594357600080fd5b61594f888286016156c7565b60608301525060808301518281111561596757600080fd5b615973888286016154f5565b6080830152508093505050509250929050565b60006101408201905083825260018060a01b03808451166020840152806020850151166040840152506040830151606083015260608301516080830152608083015160a083015260a08301516159df60c084018261402c565b5060c083015163ffffffff811660e08401525060e0830151610100838101919091529092015161012090910152919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8082018082111561046457610464615298565b60ff818116838216019081111561046457610464615298565b600060208284031215615ae857600080fd5b81516001600160401b03811115615afe57600080fd5b8201601f81018413615b0f57600080fd5b611bd4848251602084016154c5565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615b50816017850160208801613f4f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615b81816028840160208801613f4f565b01602801949350505050565b60ff828116828216039081111561046457610464615298565b808202811582820484141761046457610464615298565b61ffff81811683821601908082111561075857610758615298565b604081526000615beb6040830185613f73565b905060018060a01b03831660208301529392505050565b600081615c1157615c11615298565b506000190190565b634e487b7160e01b600052603160045260246000fdfe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d2d676574546f6b656e4272616e6368207461736b49642d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a26469706673582212208dc470251523200bfefc31a7fbebee576b1a4c7704dcb2cc67bc78f2806a1f7f64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
