{
  "_format": "hh-sol-artifact-1",
  "contractName": "BossHandler",
  "sourceName": "contracts/V3/handler/BossHandler.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "bossHandlerHelper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regRule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506148c7806100206000396000f3fe608060405234801561001057600080fd5b50600436106101175760003560e01c80638129fc1c116100a85780638129fc1c146101f45780638da5cb5b146101fc57806395edcb081461021c5780639bcd1e5c1461023c578063a903620c1461024f578063af84b51f14610262578063b41bd78914610282578063b4b7035214610295578063d0d35b55146102a8578063f2fde38b146102bb578063f2fe4fa5146102ce57600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b157806362329cc5146101c65780636dabaf04146101d9578063715018a6146101ec575b600080fd5b61013061012a366004612de8565b50600090565b60405190151581526020015b60405180910390f35b610158610153366004612f2d565b6102dd565b60405161013c9190612fde565b6040805160208101909152600081525b60405161013c919061307e565b610195610190366004613091565b610377565b60405161013c9190613105565b6040516000815260200161013c565b6101c46101bf366004613152565b6103a8565b005b6101956101d43660046131e3565b610429565b6101306101e7366004613286565b610506565b6101c46105b8565b6101c46105f3565b610204610668565b6040516001600160a01b03909116815260200161013c565b61022f61022a366004613513565b610677565b60405161013c91906136dd565b606954610204906001600160a01b031681565b6101c461025d366004613e29565b610f38565b610275610270366004613fdc565b610fb5565b60405161013c91906140f9565b6101c461029036600461415b565b611112565b6101306102a3366004612de8565b6111b3565b6101756102b636600461418f565b611226565b6101c46102c93660046141d2565b61123d565b606060405161013c919061422b565b60408051602081019091526060815260006102fe8a898989898e60006112da565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035d57602002820191906000526020600020905b815481526020019060010190808311610349575b5050509190925250919d9c50505050505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103e091906142b0565b90815260405190819003602001902054336001600160a01b03909116146104225760405162461bcd60e51b8152600401610419906142cc565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561044657610446612c5d565b60405190808252806020026020018201604052801561046f578160200160208202803683370190505b50905060005b81518110156104ff57606584828151811061049257610492614303565b60200260200101516040516104a791906142b0565b9081526040519081900360200190205482516001600160a01b03909116908390839081106104d7576104d7614303565b6001600160a01b03909216602092830291909101909101526104f88161432f565b9050610475565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060658160405161054791906142b0565b90815260405190819003602001902054336001600160a01b03909116146105805760405162461bcd60e51b8152600401610419906142cc565b60ff84161580610593575060ff84166001145b156105ab578251156105ab576105ab87878786611349565b5060019695505050505050565b336105c1610668565b6001600160a01b0316146105e75760405162461bcd60e51b815260040161041990614348565b6105f16000611802565b565b60006105ff6001611854565b90508015610617576000805461ff0019166101001790555b61061f6118e1565b8015610665576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b61067f612aff565b60405180604001604052806006815260200165456e67696e6560d01b8152506065816040516106ae91906142b0565b90815260405190819003602001902054336001600160a01b03909116146106e75760405162461bcd60e51b8152600401610419906142cc565b6107226040518060400160405280601a8152602001793137b9b9903430b7323632b910383937b1b2b9b9903132b3b4b760311b815250611910565b308352606084015160009061073690611953565b90506107666040518060400160405280600b81526020016a1c9b1c105c99dcd31a5cdd60aa1b8152508251611965565b606085015161010081015160009161077d906119ae565b61078a88606001516119cd565b60405160200161079c9392919061437d565b6040516020818303038152906040528051906020012090506107eb60405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203160501b815250611910565b30855260408051808201909152600b81526a706172616d20737461746560a81b60208201526080870151610822919060ff16611965565b608086015160ff16610b5f57610865604051806040016040528060168152602001753137b9b9903430b7323632b910383937b1b2b9b9901960511b815250611910565b60608601516000906108819061087c9085846119f2565b611a4c565b90506108b860405180604001604052806013815260200172626f73732068616e646c65722075736572534360681b81525082611965565b6000876060015161014001516000815181106108d6576108d6614303565b602002602001015160200151905060008860600151610140015160018151811061090257610902614303565b6020026020010151602001519050600089606001516101400151516001600160401b0381111561093457610934612c5d565b60405190808252806020026020018201604052801561095d578160200160208202803683370190505b50905061099f604051806040016040528060138152602001720d2dce8ded6cadc40d8d2e6e840d8cadccee8d606b1b8152508b60600151610140015151611965565b60005b8151811015610a01578a60600151610140015181815181106109c6576109c6614303565b6020026020010151604001518282815181106109e4576109e4614303565b6020908102919091010152806109f98161432f565b9150506109a2565b50610a3960405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203360501b815250611910565b6069548a51604051632d20066760e21b81526001600160a01b039092169163b480199c91610a74918991908890889088908c9060040161439f565b600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505050506000610afe338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610aeb578c6060015160e00151610af5565b8c6060015160c001515b8d5160006112da565b9050610b0d8882600080611a9a565b610b4460405180604001604052806016815260200175189bdcdcc81a185b991b195c881c1c9bd8d95cdcc80d60521b815250611910565b610b4e8888611b8a565b600560208201529650610f2e915050565b600160ff16866080015160ff1603610f2e57610ba860405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203560501b815250611910565b6000610bfd33886060015160200151896060015161010001518a602001518b6060015160e0015163ffffffff16600014610bea578b6060015160e00151610bf4565b8b6060015160c001515b8c5160006112da565b90506000610c1e61087c8560008b606001516119f29092919063ffffffff16565b60056020890152905060091960ff821601610db1576000606960009054906101000a90046001600160a01b03166001600160a01b031663716d7b40856040518060e001604052808d60600151602001516001600160a01b031681526020018d60600151610100015163ffffffff168152602001610c9e8e606001516119ae565b61ffff168152602001610cb48e606001516119cd565b61ffff1681526020018d602001516001600160a01b031681526020018d6060015160c0015163ffffffff1681526020018d600001516001600160a01b03168152506040518363ffffffff1660e01b8152600401610d12929190614483565b6020604051808303816000875af1158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5591906144a8565b90508015610d6957600a6020890152610dab565b604080518082018252601c81527f6d616b652072616e646f6d20657863656564207374642074696d657300000000602080830191909152918a01526001908901525b50610f2b565b60ff8116610f2b57600080606960009054906101000a90046001600160a01b03166001600160a01b0316638ad0495a866040518060e001604052808e60600151602001516001600160a01b031681526020018e60600151610100015163ffffffff168152602001610e258f606001516119ae565b61ffff168152602001610e3b8f606001516119cd565b61ffff1681526020018e602001516001600160a01b031681526020018e6060015160c0015163ffffffff1681526020018e600001516001600160a01b03168152506040518363ffffffff1660e01b8152600401610e99929190614483565b60408051808303816000875af1158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb91906144c3565b91509150610f1460405180604001604052806013815260200172189bdcdcc81a185b991b195c881c995dd85c99606a1b81525082611965565b610f218a85836001611a9a565b5050606460208801525b50505b5092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606581604051610f7791906142b0565b90815260405190819003602001902054336001600160a01b0390911614610fb05760405162461bcd60e51b8152600401610419906142cc565b505050565b60606000826040015183606001518460800151604051602001610fda9392919061437d565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526069546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a926110c49291889188906004016144ef565b600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111099190810190614552565b95945050505050565b3361111b610668565b6001600160a01b0316146111415760405162461bcd60e51b815260040161041990614348565b61114a81611b98565b60408051808201825260138152722127a9a9afa420a7222622a92fa422a62822a960691b60208201529051606591611181916142b0565b90815260405190819003602001902054606980546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b8152506065816040516111e491906142b0565b90815260405190819003602001902054336001600160a01b039091161461121d5760405162461bcd60e51b8152600401610419906142cc565b50600092915050565b6040805160208101909152600081525b9392505050565b33611246610668565b6001600160a01b03161461126c5760405162461bcd60e51b815260040161041990614348565b6001600160a01b0381166112d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610419565b61066581611802565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061135482611cba565b90506000611363836000611ccf565b9050600086868660405160200161137c9392919061437d565b604051602081830303815290604052805190602001209050816000036116a65760006113a9856001611ccf565b905060006113b8866002611ccf565b905060006113c7876003611ccf565b905060006113d6886004611ccf565b905060006113e5896005611ccf565b905060006113f48a6006611ccf565b60695460405163a8ed9ef960e01b8152600481018a90526024810189905260448101889052606481018790526084810186905260a4810185905260c481018390529192506001600160a01b03169063a8ed9ef99060e401600060405180830381600087803b15801561146557600080fd5b505af1158015611479573d6000803e3d6000fd5b505050505050505050506000611490856007611ccf565b905060005b8181101561169f576114a5612b25565b60006114d1886114b685600761460a565b6114c1906007614621565b6114cc906001614621565b611ccf565b63ffffffff168252506000611501886114eb85600761460a565b6114f6906007614621565b6114cc906002614621565b63ffffffff1660208301525060006115348861151e85600761460a565b611529906007614621565b6114cc906003614621565b63ffffffff1660408301525060006115678861155185600761460a565b61155c906007614621565b6114cc906004614621565b63ffffffff16606083015250600061159a8861158485600761460a565b61158f906007614621565b6114cc906005614621565b60808301525060006115c7886115b185600761460a565b6115bc906007614621565b6114cc906007614621565b63ffffffff1660a08301525060006115fa886115e485600761460a565b6115ef906007614621565b6114cc906006614621565b606954604051630eafb69b60e31b81529192506001600160a01b03169063757db4d89061162f90889085908790600401614634565b600060405180830381600087803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b5050505061168a6040518060400160405280600781526020016619d85cd319599d60ca1b8152505a611965565b505080806116979061432f565b915050611495565b50506117f9565b816001036117f9576116b6612b25565b60006116c3866001611ccf565b63ffffffff1682525060006116d9866002611ccf565b63ffffffff1660208301525060006116f2866003611ccf565b63ffffffff16604083015250600061170b866004611ccf565b63ffffffff166060830152506000611724866005611ccf565b6080830152506000611737866007611ccf565b63ffffffff1660a0830152506000611750866006611ccf565b9050806000036117905760405162461bcd60e51b815260206004820152600b60248201526a6c6576656c207a65726f2160a81b6044820152606401610419565b606954604051630eafb69b60e31b81526001600160a01b039091169063757db4d8906117c490869085908790600401614634565b600060405180830381600087803b1580156117de57600080fd5b505af11580156117f2573d6000803e3d6000fd5b5050505050505b50505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff161561189b578160ff1660011480156118775750303b155b6118935760405162461bcd60e51b815260040161041990614697565b506000919050565b60005460ff8084169116106118c25760405162461bcd60e51b815260040161041990614697565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166119085760405162461bcd60e51b8152600401610419906146e5565b6105f1611d1a565b61066581604051602401611924919061307e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611d4a565b606061195f8230611d53565b92915050565b6119aa828260405160240161197b929190614730565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052611d4a565b5050565b600061195f8260a001516010600060086119c89190614621565b611e05565b600061195f8260a001516010600060086119e79190614621565b6119c8906010614621565b6119fa612b5a565b611a2983611a09846001614752565b60ff1681518110611a1c57611a1c614303565b6020026020010151611e24565b600281518110611a3b57611a3b614303565b602002602001015190509392505050565b805160009015801590611a6157508151602110155b611a6a57600080fd5b600080611a7684611f2d565b815191935091506020821015611a925760208290036101000a90045b949350505050565b6000611aa4611f74565b9050611abc6040518060200160405280606081525090565b606560408301528315611b42576066604083810191909152805160018082528183019092529060208083019080368337505050610140830152604080516001808252818301909252906020808301908036833750505061016083018190528051859190600090611b2e57611b2e614303565b602090810291909101015260016101208301525b8215611b5057600160208301525b611b5a8183611fbb565b6000858152606660209081526040909120825180518493611b7f928492910190612b74565b505050505050505050565b611b92612aff565b50919050565b33611ba1610668565b6001600160a01b031614611bc75760405162461bcd60e51b815260040161041990614348565b60005b81518110156119aa57818181518110611be557611be5614303565b60200260200101516065838381518110611c0157611c01614303565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e919081019061476b565b604051611c7b91906142b0565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055611cb38161432f565b9050611bca565b60606000611236611cca846125b3565b611e24565b600080611cde611cca856125b3565b9050611a92611cfb828560ff1681518110611a1c57611a1c614303565b600281518110611d0d57611d0d614303565b6020026020010151611a4c565b600054610100900460ff16611d415760405162461bcd60e51b8152600401610419906146e5565b6105f133611802565b610665816125d9565b60606000611d68611cca8561016001516125b3565b905060005b8151811015611dfa576000611daf611d90848481518110611a1c57611a1c614303565b600081518110611da257611da2614303565b60200260200101516125fa565b9050846001600160a01b0316816001600160a01b031603611de957611ddf838381518110611a1c57611a1c614303565b935050505061195f565b50611df38161432f565b9050611d6d565b506060949350505050565b91821c91600080611e19600180861b6147b3565b909416949350505050565b6060611e2f82612614565b611e3857600080fd5b6000611e438361264f565b90506000816001600160401b03811115611e5f57611e5f612c5d565b604051908082528060200260200182016040528015611e9857816020015b611e85612b5a565b815260200190600190039081611e7d5790505b5090506000611eaa85602001516126d4565b8560200151611eb99190614621565b90506000805b84811015611f2257611ed08361274f565b9150604051806040016040528083815260200184815250848281518110611ef957611ef9614303565b6020908102919091010152611f0e8284614621565b925080611f1a8161432f565b915050611ebf565b509195945050505050565b6000806000611f3f84602001516126d4565b90506000818560200151611f539190614621565b90506000828660000151611f6791906147b3565b9196919550909350505050565b611f7c612bbf565b611f84612bbf565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015611fd65780611fd28161432f565b9150505b8160e0015161271014611ff15780611fed8161432f565b9150505b8161010001516127101461200d57806120098161432f565b9150505b6101408201515115158061202657506101608201515115155b8061203657506101a08201515115155b156120a857600082610160015151836101400151511161207b57826101a0015151836101600151511161206f57826101a0015151612083565b82610160015151612083565b826101400151515b905061209081600461460a565b61209a9083614621565b60ff90911661012084015290505b6120d26040518060600160405280602e81526020016147fb602e913983610120015160ff16611965565b806001600160401b038111156120ea576120ea612c5d565b604051908082528060200260200182016040528015612113578160200160208202803683370190505b50835281516121239084906127f3565b61213183836020015161284b565b61213f83836060015161288c565b61214d8383604001516128db565b61215c8383610120015161291f565b61217d60405180606001604052806025815260200161482960259139611910565b60008060019050836080015162ffffff16612710146121b2576121a48585608001516129b0565b6121af6001836147c6565b91505b8360a0015163ffffffff16612710146121e1576121d3858560a00151612a17565b6121de6002836147c6565b91505b60c0840151156122275760c08401518551826121fc8161432f565b93508151811061220e5761220e614303565b60209081029190910101526122246004836147c6565b91505b8360e00151612710146122705760e08401518551826122458161432f565b93508151811061225757612257614303565b602090810291909101015261226d6008836147c6565b91505b836101000151612710146122bb576101008401518551826122908161432f565b9350815181106122a2576122a2614303565b60209081029190910101526122b86010836147c6565b91505b61012084015160ff16156125a95760005b84610120015160ff16811015612577576000856101400151511180156122f757508461014001515181105b1561234e57846101400151818151811061231357612313614303565b60200260200101518660000151838061232b9061432f565b94508151811061233d5761233d614303565b60200260200101818152505061237c565b85516000908361235d8161432f565b94508151811061236f5761236f614303565b6020026020010181815250505b60008561016001515111801561239757508461016001515181105b156123ee5784610160015181815181106123b3576123b3614303565b6020026020010151866000015183806123cb9061432f565b9450815181106123dd576123dd614303565b60200260200101818152505061241c565b8551600090836123fd8161432f565b94508151811061240f5761240f614303565b6020026020010181815250505b60008561018001515111801561243757508461018001515181105b1561249157846101800151818151811061245357612453614303565b602002602001015160ff168660000151838061246e9061432f565b94508151811061248057612480614303565b6020026020010181815250506124be565b855181908361249f8161432f565b9450815181106124b1576124b1614303565b6020026020010181815250505b6000856101a00151511180156124d95750846101a001515181105b1561253957846101a0015181815181106124f5576124f5614303565b60200260200101516001600160a01b0316866000015183806125169061432f565b94508151811061252857612528614303565b602002602001018181525050612567565b8551600090836125488161432f565b94508151811061255a5761255a614303565b6020026020010181815250505b6125708161432f565b90506122cc565b506125836020836147c6565b91506125a960405180608001604052806044815260200161484e60449139865151611965565b6104228583612a8a565b6125bb612b5a565b50604080518082019091528151815260209182019181019190915290565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b805160009060151461260b57600080fd5b61195f82611a4c565b8051600090810361262757506000919050565b6020820151805160001a9060c0821015612645575060009392505050565b5060019392505050565b8051600090810361266257506000919050565b60008061267284602001516126d4565b84602001516126819190614621565b90506000846000015185602001516126999190614621565b90505b808210156126cb576126ad8261274f565b6126b79083614621565b9150826126c38161432f565b93505061269c565b50909392505050565b8051600090811a60808110156126ed5750600092915050565b60b8811080612708575060c08110801590612708575060f881105b156127165750600192915050565b60c08110156127435761272b600160b86147e1565b6127389060ff16826147b3565b611236906001614621565b61272b600160f86147e1565b80516000908190811a608081101561276a57600191506104ff565b60b88110156127905761277e6080826147b3565b612789906001614621565b91506104ff565b60c08110156127bd5760b78103600185019450806020036101000a855104600182018101935050506104ff565b60f88110156127d15761277e60c0826147b3565b60019390930151602084900360f7016101000a900490920160f5190192915050565b612828826000015160008151811061280d5761280d614303565b60200260200101518260ff16600860ff16600060ff16612ada565b8251805160009061283b5761283b614303565b6020026020010181815250505050565b612828826000015160008151811061286557612865614303565b60200260200101518260ff16600460ff16600060086128849190614752565b60ff16612ada565b61282882600001516000815181106128a6576128a6614303565b60200260200101518260ff16600460ff16600060086128c59190614752565b6128d0906004614752565b612884906008614752565b61282882600001516000815181106128f5576128f5614303565b60200260200101518260ff16600860ff16600060086129149190614752565b612884906004614752565b612828826000015160008151811061293957612939614303565b60200260200101518260ff16600860ff16600060086129589190614752565b612963906004614752565b61296e906008614752565b612979906004614752565b612984906010614752565b61298f906018614752565b61299a906020614752565b6129a5906020614752565b612884906020614752565b61282882600001516000815181106129ca576129ca614303565b60200260200101518262ffffff16601860ff16600060086129eb9190614752565b6129f6906004614752565b612a01906008614752565b612a0c906004614752565b612884906010614752565b6128288260000151600081518110612a3157612a31614303565b60200260200101518263ffffffff16602060ff1660006008612a539190614752565b612a5e906004614752565b612a69906008614752565b612a74906004614752565b612a7f906010614752565b612884906018614752565b6128288260000151600081518110612aa457612aa4614303565b60200260200101518261ffff16601060ff1660006008612ac49190614752565b612acf906004614752565b612914906008614752565b600083821b8183612aee600180881b6147b3565b901b19969096161795945050505050565b604080516080810182526000808252602082015260609181018290528181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215612baf579160200282015b82811115612baf578251825591602001919060010190612b94565b50612bbb929150612c48565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115612bbb5760008155600101612c49565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612c9657612c96612c5d565b60405290565b60405160a081016001600160401b0381118282101715612c9657612c96612c5d565b604080519081016001600160401b0381118282101715612c9657612c96612c5d565b604051608081016001600160401b0381118282101715612c9657612c96612c5d565b60405161018081016001600160401b0381118282101715612c9657612c96612c5d565b604051606081016001600160401b0381118282101715612c9657612c96612c5d565b60405161016081016001600160401b0381118282101715612c9657612c96612c5d565b604051601f8201601f191681016001600160401b0381118282101715612d9257612d92612c5d565b604052919050565b80356001600160a01b03811681146118dc57600080fd5b803563ffffffff811681146118dc57600080fd5b803560ff811681146118dc57600080fd5b803561ffff811681146118dc57600080fd5b60006101408284031215612dfb57600080fd5b612e03612c73565b612e0c83612d9a565b8152612e1a60208401612d9a565b6020820152612e2b60408401612d9a565b6040820152612e3c60608401612db1565b6060820152612e4d60808401612db1565b6080820152612e5e60a08401612d9a565b60a0820152612e6f60c08401612dc5565b60c0820152612e8060e08401612dd6565b60e0820152610100612e93818501612dc5565b90820152610120612ea5848201612dc5565b908201529392505050565b60006001600160401b03821115612ec957612ec9612c5d565b50601f01601f191660200190565b600082601f830112612ee857600080fd5b8135612efb612ef682612eb0565b612d6a565b818152846020838601011115612f1057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215612f4a57600080fd5b612f5389612d9a565b9750612f6160208a01612d9a565b9650612f6f60408a01612d9a565b9550612f7d60608a01612db1565b9450612f8b60808a01612d9a565b9350612f9960a08a01612db1565b925060c08901356001600160401b03811115612fb457600080fd5b612fc08b828c01612ed7565b925050612fcf60e08a01612dd6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156130235783518252928401926001929092019190840190613003565b509695505050505050565b60005b83811015613049578181015183820152602001613031565b50506000910152565b6000815180845261306a81602086016020860161302e565b601f01601f19169290920160200192915050565b6020815260006112366020830184613052565b60008060008060008060c087890312156130aa57600080fd5b6130b387612d9a565b95506130c160208801612d9a565b94506130cf60408801612db1565b93506130dd60608801612d9a565b92506130eb60808801612db1565b91506130f960a08801612dd6565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156131465783516001600160a01b031683529284019291840191600101613121565b50909695505050505050565b6000806000806080858703121561316857600080fd5b61317185612db1565b935061317f60208601612dd6565b925061318d60408601612dc5565b915060608501356001600160401b038111156131a857600080fd5b6131b487828801612ed7565b91505092959194509250565b60006001600160401b038211156131d9576131d9612c5d565b5060051b60200190565b600060208083850312156131f657600080fd5b82356001600160401b038082111561320d57600080fd5b818501915085601f83011261322157600080fd5b813561322f612ef6826131c0565b81815260059190911b8301840190848101908883111561324e57600080fd5b8585015b8381101561039b5780358581111561326a5760008081fd5b6132788b89838a0101612ed7565b845250918601918601613252565b600080600080600060a0868803121561329e57600080fd5b6132a786612db1565b94506132b560208701612dd6565b93506132c360408701612dd6565b92506132d160608701612dc5565b915060808601356001600160401b038111156132ec57600080fd5b6132f888828901612ed7565b9150509295509295909350565b600082601f83011261331657600080fd5b81356020613326612ef6836131c0565b82815260059290921b8401810191818101908684111561334557600080fd5b8286015b848110156130235780356001600160401b038082111561336857600080fd5b9088019060a0828b03601f1901121561338057600080fd5b613388612c9c565b613393878401612dc5565b815260406133a2818501612d9a565b888301526060840135818301526080840135606083015260a0840135838111156133cc5760008081fd5b8085019450508b603f8501126133e457600092508283fd5b8784013592506133f6612ef6846131c0565b83815260069390931b8401810192888101908d8511156134165760008081fd5b948201945b8486101561346d5782868f0312156134335760008081fd5b61343b612cbe565b61344487612db1565b81528a8701358060040b811461345a5760008081fd5b818c01528252948201949089019061341b565b6080840152505085525050918301918301613349565b60006080828403121561349557600080fd5b61349d612ce0565b90506134a882612d9a565b81526134b660208301612dc5565b602082015260408201356001600160401b03808211156134d557600080fd5b6134e185838601612ed7565b604084015260608401359150808211156134fa57600080fd5b5061350784828501612ed7565b60608301525092915050565b6000806040838503121561352657600080fd5b82356001600160401b038082111561353d57600080fd5b9084019060a0828703121561355157600080fd5b613559612c9c565b61356283612d9a565b815261357060208401612d9a565b602082015261358160408401612d9a565b604082015260608301358281111561359857600080fd5b830161018081890312156135ab57600080fd5b6135b3612d02565b6135bc82612d9a565b81526135ca60208301612d9a565b60208201526135db60408301612d9a565b60408201526135ec60608301612d9a565b60608201526080820135608082015260a082013560a082015261361160c08301612db1565b60c082015261362260e08301612db1565b60e0820152610100613635818401612db1565b90820152610120613647838201612dc5565b90820152610140828101358581111561365f57600080fd5b61366b8b828601613305565b828401525050610160808301358581111561368557600080fd5b6136918b828601612ed7565b82840152505080606084015250506136ab60808401612dc5565b6080820152935060208501359150808211156136c657600080fd5b506136d385828601613483565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261371860a0840182613052565b90506060840151601f198483030160808501526111098282613052565b600082601f83011261374657600080fd5b81356020613756612ef6836131c0565b82815260059290921b8401810191818101908684111561377557600080fd5b8286015b848110156130235780358352918301918301613779565b600082601f8301126137a157600080fd5b813560206137b1612ef6836131c0565b82815260059290921b840181019181810190868411156137d057600080fd5b8286015b84811015613023576137e581612d9a565b83529183019183016137d4565b600082601f83011261380357600080fd5b81356020613813612ef6836131c0565b82815260059290921b8401810191818101908684111561383257600080fd5b8286015b848110156130235780356001600160401b038082111561385557600080fd5b90880190601f196080838c038201121561386e57600080fd5b613876612ce0565b878401358381111561388757600080fd5b84016060818e038401121561389b57600080fd5b6138a3612d25565b92506138b0898201612dc5565b835260406138bf818301612d9a565b8a8501526060820135858111156138d557600080fd5b6138e38f8c83860101613735565b82860152508383526138f6818701612dc5565b8a840152606086013593508484111561390e57600080fd5b61391c8e8b86890101613790565b9083015250608084013591508282111561393557600080fd5b6139438c8984870101613735565b60608201528652505050918301918301613836565b600082601f83011261396957600080fd5b81356020613979612ef6836131c0565b82815260059290921b8401810191818101908684111561399857600080fd5b8286015b848110156130235780356001600160401b038111156139bb5760008081fd5b6139c98986838b0101612ed7565b84525091830191830161399c565b600082601f8301126139e857600080fd5b813560206139f8612ef6836131c0565b82815260059290921b84018101918181019086841115613a1757600080fd5b8286015b848110156130235780356001600160401b0380821115613a3b5760008081fd5b9088019060a0828b03601f1901811315613a555760008081fd5b613a5d612c9c565b8784013583811115613a6f5760008081fd5b613a7d8d8a838801016137f2565b8252506040613a8d818601612dc5565b898301526060613a9e818701612d9a565b82840152608091508186013585811115613ab85760008081fd5b613ac68f8c838a0101613790565b82850152505082850135925083831115613ae05760008081fd5b613aee8d8a85880101613958565b908201528652505050918301918301613a1b565b600082601f830112613b1357600080fd5b81356020613b23612ef6836131c0565b82815260059290921b84018101918181019086841115613b4257600080fd5b8286015b8481101561302357613b5781612dc5565b8352918301918301613b46565b80356001600160401b03811681146118dc57600080fd5b600082601f830112613b8c57600080fd5b81356020613b9c612ef6836131c0565b82815260059290921b84018101918181019086841115613bbb57600080fd5b8286015b848110156130235780356001600160401b0380821115613bdf5760008081fd5b90880190610160828b03601f1901811315613bfa5760008081fd5b613c02612d47565b613c0d888501612dd6565b81526040613c1c818601612dd6565b898301526060613c2d818701612dc5565b8284015260809150613c40828701612db1565b9083015260a0613c51868201612dc5565b8284015260c09150613c64828701612db1565b9083015260e0613c75868201612db1565b828401526101009150613c89828701613b64565b908301526101208581013585811115613ca25760008081fd5b613cb08f8c838a0101613790565b838501525061014091508186013585811115613ccc5760008081fd5b613cda8f8c838a0101613958565b828501525050613ceb838601612d9a565b908201528652505050918301918301613bbf565b600082601f830112613d1057600080fd5b81356020613d20612ef6836131c0565b82815260059290921b84018101918181019086841115613d3f57600080fd5b8286015b848110156130235780356001600160401b0380821115613d635760008081fd5b9088019060a0828b03601f1901811315613d7d5760008081fd5b613d85612c9c565b613d90888501612db1565b815260408085013584811115613da65760008081fd5b613db48e8b83890101612ed7565b8a8401525060608086013585811115613dcd5760008081fd5b613ddb8f8c838a0101612ed7565b8385015250608091508186013585811115613df65760008081fd5b613e048f8c838a0101612ed7565b828501525050613e15838601612dc5565b908201528652505050918301918301613d43565b60008060408385031215613e3c57600080fd5b613e4583612db1565b915060208301356001600160401b0380821115613e6157600080fd5b908401906101608287031215613e7657600080fd5b613e7e612d47565b823582811115613e8d57600080fd5b613e99888286016139d7565b825250602083013582811115613eae57600080fd5b613eba88828601613b02565b602083015250604083013582811115613ed257600080fd5b613ede88828601613b7b565b604083015250606083013582811115613ef657600080fd5b613f0288828601613cff565b606083015250608083013582811115613f1a57600080fd5b613f2688828601613b02565b60808301525060a083013582811115613f3e57600080fd5b613f4a88828601613790565b60a08301525060c083013582811115613f6257600080fd5b613f6e88828601613790565b60c083015250613f8060e08401612db1565b60e0820152610100613f93818501612db1565b90820152610120613fa5848201612dc5565b908201526101408381013583811115613fbd57600080fd5b613fc989828701612ed7565b8284015250508093505050509250929050565b600060208284031215613fee57600080fd5b81356001600160401b038082111561400557600080fd5b90830190610160828603121561401a57600080fd5b614022612d47565b61402b83612d9a565b815261403960208401612d9a565b602082015261404a60408401612db1565b604082015261405b60608401612dd6565b606082015261406c60808401612dd6565b608082015261407d60a08401612dc5565b60a082015261408e60c08401612d9a565b60c082015261409f60e08401612db1565b60e08201526101006140b2818501612d9a565b908201526101206140c4848201612dc5565b9082015261014083810135838111156140dc57600080fd5b6140e888828701612ed7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561414e57603f1988860301845261413c858351613052565b94509285019290850190600101614120565b5092979650505050505050565b60006020828403121561416d57600080fd5b81356001600160401b0381111561418357600080fd5b611a9284828501613790565b6000806000606084860312156141a457600080fd5b6141ad84612db1565b92506141bb60208501612dd6565b91506141c960408501612dc5565b90509250925092565b6000602082840312156141e457600080fd5b61123682612d9a565b600081518084526020808501945080840160005b8381101561422057815160ff1687529582019590820190600101614201565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156142a257888303603f1901855281518051878552614276888601826141ed565b91890151858303868b015291905061428e81836141ed565b968901969450505090860190600101614252565b509098975050505050505050565b600082516142c281846020870161302e565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161434157614341614319565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b8681526001600160a01b038681166020808401919091528682166040840152908516606083015260c06080830181905284519083018190526000918581019160e0850190845b81811015614401578451835293830193918301916001016143e5565b50508093505050508260a0830152979650505050505050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b8281526101008101611236602083018461441a565b805180151581146118dc57600080fd5b6000602082840312156144ba57600080fd5b61123682614498565b600080604083850312156144d657600080fd5b6144df83614498565b9150602083015190509250929050565b600061014060ff8716835285602084015280604084015261451281840186613052565b915050611109606083018461441a565b6000614530612ef684612eb0565b905082815283838301111561454457600080fd5b61123683602083018461302e565b6000602080838503121561456557600080fd5b82516001600160401b038082111561457c57600080fd5b818501915085601f83011261459057600080fd5b815161459e612ef6826131c0565b81815260059190911b830184019084810190888311156145bd57600080fd5b8585015b8381101561039b578051858111156145d95760008081fd5b8601603f81018b136145eb5760008081fd5b6145fc8b8983015160408401614522565b8452509186019186016145c1565b808202811582820484141761195f5761195f614319565b8082018082111561195f5761195f614319565b60006101008201905084825283602083015263ffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a0840152608084015160c08401528060a08501511660e084015250949350505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6040815260006147436040830185613052565b90508260208301529392505050565b60ff818116838216019081111561195f5761195f614319565b60006020828403121561477d57600080fd5b81516001600160401b0381111561479357600080fd5b8201601f810184136147a457600080fd5b611a9284825160208401614522565b8181038181111561195f5761195f614319565b61ffff8181168382160190808211156104ff576104ff614319565b60ff828116828216039081111561195f5761195f61431956fe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a264697066735822122044e870958f2428ae3421d61cbe56578f45b050c6114d7490fa8f0e2123c9524d64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101175760003560e01c80638129fc1c116100a85780638129fc1c146101f45780638da5cb5b146101fc57806395edcb081461021c5780639bcd1e5c1461023c578063a903620c1461024f578063af84b51f14610262578063b41bd78914610282578063b4b7035214610295578063d0d35b55146102a8578063f2fde38b146102bb578063f2fe4fa5146102ce57600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b157806362329cc5146101c65780636dabaf04146101d9578063715018a6146101ec575b600080fd5b61013061012a366004612de8565b50600090565b60405190151581526020015b60405180910390f35b610158610153366004612f2d565b6102dd565b60405161013c9190612fde565b6040805160208101909152600081525b60405161013c919061307e565b610195610190366004613091565b610377565b60405161013c9190613105565b6040516000815260200161013c565b6101c46101bf366004613152565b6103a8565b005b6101956101d43660046131e3565b610429565b6101306101e7366004613286565b610506565b6101c46105b8565b6101c46105f3565b610204610668565b6040516001600160a01b03909116815260200161013c565b61022f61022a366004613513565b610677565b60405161013c91906136dd565b606954610204906001600160a01b031681565b6101c461025d366004613e29565b610f38565b610275610270366004613fdc565b610fb5565b60405161013c91906140f9565b6101c461029036600461415b565b611112565b6101306102a3366004612de8565b6111b3565b6101756102b636600461418f565b611226565b6101c46102c93660046141d2565b61123d565b606060405161013c919061422b565b60408051602081019091526060815260006102fe8a898989898e60006112da565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035d57602002820191906000526020600020905b815481526020019060010190808311610349575b5050509190925250919d9c50505050505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103e091906142b0565b90815260405190819003602001902054336001600160a01b03909116146104225760405162461bcd60e51b8152600401610419906142cc565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561044657610446612c5d565b60405190808252806020026020018201604052801561046f578160200160208202803683370190505b50905060005b81518110156104ff57606584828151811061049257610492614303565b60200260200101516040516104a791906142b0565b9081526040519081900360200190205482516001600160a01b03909116908390839081106104d7576104d7614303565b6001600160a01b03909216602092830291909101909101526104f88161432f565b9050610475565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060658160405161054791906142b0565b90815260405190819003602001902054336001600160a01b03909116146105805760405162461bcd60e51b8152600401610419906142cc565b60ff84161580610593575060ff84166001145b156105ab578251156105ab576105ab87878786611349565b5060019695505050505050565b336105c1610668565b6001600160a01b0316146105e75760405162461bcd60e51b815260040161041990614348565b6105f16000611802565b565b60006105ff6001611854565b90508015610617576000805461ff0019166101001790555b61061f6118e1565b8015610665576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b61067f612aff565b60405180604001604052806006815260200165456e67696e6560d01b8152506065816040516106ae91906142b0565b90815260405190819003602001902054336001600160a01b03909116146106e75760405162461bcd60e51b8152600401610419906142cc565b6107226040518060400160405280601a8152602001793137b9b9903430b7323632b910383937b1b2b9b9903132b3b4b760311b815250611910565b308352606084015160009061073690611953565b90506107666040518060400160405280600b81526020016a1c9b1c105c99dcd31a5cdd60aa1b8152508251611965565b606085015161010081015160009161077d906119ae565b61078a88606001516119cd565b60405160200161079c9392919061437d565b6040516020818303038152906040528051906020012090506107eb60405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203160501b815250611910565b30855260408051808201909152600b81526a706172616d20737461746560a81b60208201526080870151610822919060ff16611965565b608086015160ff16610b5f57610865604051806040016040528060168152602001753137b9b9903430b7323632b910383937b1b2b9b9901960511b815250611910565b60608601516000906108819061087c9085846119f2565b611a4c565b90506108b860405180604001604052806013815260200172626f73732068616e646c65722075736572534360681b81525082611965565b6000876060015161014001516000815181106108d6576108d6614303565b602002602001015160200151905060008860600151610140015160018151811061090257610902614303565b6020026020010151602001519050600089606001516101400151516001600160401b0381111561093457610934612c5d565b60405190808252806020026020018201604052801561095d578160200160208202803683370190505b50905061099f604051806040016040528060138152602001720d2dce8ded6cadc40d8d2e6e840d8cadccee8d606b1b8152508b60600151610140015151611965565b60005b8151811015610a01578a60600151610140015181815181106109c6576109c6614303565b6020026020010151604001518282815181106109e4576109e4614303565b6020908102919091010152806109f98161432f565b9150506109a2565b50610a3960405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203360501b815250611910565b6069548a51604051632d20066760e21b81526001600160a01b039092169163b480199c91610a74918991908890889088908c9060040161439f565b600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b505050505050506000610afe338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610aeb578c6060015160e00151610af5565b8c6060015160c001515b8d5160006112da565b9050610b0d8882600080611a9a565b610b4460405180604001604052806016815260200175189bdcdcc81a185b991b195c881c1c9bd8d95cdcc80d60521b815250611910565b610b4e8888611b8a565b600560208201529650610f2e915050565b600160ff16866080015160ff1603610f2e57610ba860405180604001604052806016815260200175626f73732068616e646c65722070726f63657373203560501b815250611910565b6000610bfd33886060015160200151896060015161010001518a602001518b6060015160e0015163ffffffff16600014610bea578b6060015160e00151610bf4565b8b6060015160c001515b8c5160006112da565b90506000610c1e61087c8560008b606001516119f29092919063ffffffff16565b60056020890152905060091960ff821601610db1576000606960009054906101000a90046001600160a01b03166001600160a01b031663716d7b40856040518060e001604052808d60600151602001516001600160a01b031681526020018d60600151610100015163ffffffff168152602001610c9e8e606001516119ae565b61ffff168152602001610cb48e606001516119cd565b61ffff1681526020018d602001516001600160a01b031681526020018d6060015160c0015163ffffffff1681526020018d600001516001600160a01b03168152506040518363ffffffff1660e01b8152600401610d12929190614483565b6020604051808303816000875af1158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5591906144a8565b90508015610d6957600a6020890152610dab565b604080518082018252601c81527f6d616b652072616e646f6d20657863656564207374642074696d657300000000602080830191909152918a01526001908901525b50610f2b565b60ff8116610f2b57600080606960009054906101000a90046001600160a01b03166001600160a01b0316638ad0495a866040518060e001604052808e60600151602001516001600160a01b031681526020018e60600151610100015163ffffffff168152602001610e258f606001516119ae565b61ffff168152602001610e3b8f606001516119cd565b61ffff1681526020018e602001516001600160a01b031681526020018e6060015160c0015163ffffffff1681526020018e600001516001600160a01b03168152506040518363ffffffff1660e01b8152600401610e99929190614483565b60408051808303816000875af1158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb91906144c3565b91509150610f1460405180604001604052806013815260200172189bdcdcc81a185b991b195c881c995dd85c99606a1b81525082611965565b610f218a85836001611a9a565b5050606460208801525b50505b5092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606581604051610f7791906142b0565b90815260405190819003602001902054336001600160a01b0390911614610fb05760405162461bcd60e51b8152600401610419906142cc565b505050565b60606000826040015183606001518460800151604051602001610fda9392919061437d565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526069546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a926110c49291889188906004016144ef565b600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111099190810190614552565b95945050505050565b3361111b610668565b6001600160a01b0316146111415760405162461bcd60e51b815260040161041990614348565b61114a81611b98565b60408051808201825260138152722127a9a9afa420a7222622a92fa422a62822a960691b60208201529051606591611181916142b0565b90815260405190819003602001902054606980546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b8152506065816040516111e491906142b0565b90815260405190819003602001902054336001600160a01b039091161461121d5760405162461bcd60e51b8152600401610419906142cc565b50600092915050565b6040805160208101909152600081525b9392505050565b33611246610668565b6001600160a01b03161461126c5760405162461bcd60e51b815260040161041990614348565b6001600160a01b0381166112d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610419565b61066581611802565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061135482611cba565b90506000611363836000611ccf565b9050600086868660405160200161137c9392919061437d565b604051602081830303815290604052805190602001209050816000036116a65760006113a9856001611ccf565b905060006113b8866002611ccf565b905060006113c7876003611ccf565b905060006113d6886004611ccf565b905060006113e5896005611ccf565b905060006113f48a6006611ccf565b60695460405163a8ed9ef960e01b8152600481018a90526024810189905260448101889052606481018790526084810186905260a4810185905260c481018390529192506001600160a01b03169063a8ed9ef99060e401600060405180830381600087803b15801561146557600080fd5b505af1158015611479573d6000803e3d6000fd5b505050505050505050506000611490856007611ccf565b905060005b8181101561169f576114a5612b25565b60006114d1886114b685600761460a565b6114c1906007614621565b6114cc906001614621565b611ccf565b63ffffffff168252506000611501886114eb85600761460a565b6114f6906007614621565b6114cc906002614621565b63ffffffff1660208301525060006115348861151e85600761460a565b611529906007614621565b6114cc906003614621565b63ffffffff1660408301525060006115678861155185600761460a565b61155c906007614621565b6114cc906004614621565b63ffffffff16606083015250600061159a8861158485600761460a565b61158f906007614621565b6114cc906005614621565b60808301525060006115c7886115b185600761460a565b6115bc906007614621565b6114cc906007614621565b63ffffffff1660a08301525060006115fa886115e485600761460a565b6115ef906007614621565b6114cc906006614621565b606954604051630eafb69b60e31b81529192506001600160a01b03169063757db4d89061162f90889085908790600401614634565b600060405180830381600087803b15801561164957600080fd5b505af115801561165d573d6000803e3d6000fd5b5050505061168a6040518060400160405280600781526020016619d85cd319599d60ca1b8152505a611965565b505080806116979061432f565b915050611495565b50506117f9565b816001036117f9576116b6612b25565b60006116c3866001611ccf565b63ffffffff1682525060006116d9866002611ccf565b63ffffffff1660208301525060006116f2866003611ccf565b63ffffffff16604083015250600061170b866004611ccf565b63ffffffff166060830152506000611724866005611ccf565b6080830152506000611737866007611ccf565b63ffffffff1660a0830152506000611750866006611ccf565b9050806000036117905760405162461bcd60e51b815260206004820152600b60248201526a6c6576656c207a65726f2160a81b6044820152606401610419565b606954604051630eafb69b60e31b81526001600160a01b039091169063757db4d8906117c490869085908790600401614634565b600060405180830381600087803b1580156117de57600080fd5b505af11580156117f2573d6000803e3d6000fd5b5050505050505b50505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff161561189b578160ff1660011480156118775750303b155b6118935760405162461bcd60e51b815260040161041990614697565b506000919050565b60005460ff8084169116106118c25760405162461bcd60e51b815260040161041990614697565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166119085760405162461bcd60e51b8152600401610419906146e5565b6105f1611d1a565b61066581604051602401611924919061307e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611d4a565b606061195f8230611d53565b92915050565b6119aa828260405160240161197b929190614730565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052611d4a565b5050565b600061195f8260a001516010600060086119c89190614621565b611e05565b600061195f8260a001516010600060086119e79190614621565b6119c8906010614621565b6119fa612b5a565b611a2983611a09846001614752565b60ff1681518110611a1c57611a1c614303565b6020026020010151611e24565b600281518110611a3b57611a3b614303565b602002602001015190509392505050565b805160009015801590611a6157508151602110155b611a6a57600080fd5b600080611a7684611f2d565b815191935091506020821015611a925760208290036101000a90045b949350505050565b6000611aa4611f74565b9050611abc6040518060200160405280606081525090565b606560408301528315611b42576066604083810191909152805160018082528183019092529060208083019080368337505050610140830152604080516001808252818301909252906020808301908036833750505061016083018190528051859190600090611b2e57611b2e614303565b602090810291909101015260016101208301525b8215611b5057600160208301525b611b5a8183611fbb565b6000858152606660209081526040909120825180518493611b7f928492910190612b74565b505050505050505050565b611b92612aff565b50919050565b33611ba1610668565b6001600160a01b031614611bc75760405162461bcd60e51b815260040161041990614348565b60005b81518110156119aa57818181518110611be557611be5614303565b60200260200101516065838381518110611c0157611c01614303565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e919081019061476b565b604051611c7b91906142b0565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055611cb38161432f565b9050611bca565b60606000611236611cca846125b3565b611e24565b600080611cde611cca856125b3565b9050611a92611cfb828560ff1681518110611a1c57611a1c614303565b600281518110611d0d57611d0d614303565b6020026020010151611a4c565b600054610100900460ff16611d415760405162461bcd60e51b8152600401610419906146e5565b6105f133611802565b610665816125d9565b60606000611d68611cca8561016001516125b3565b905060005b8151811015611dfa576000611daf611d90848481518110611a1c57611a1c614303565b600081518110611da257611da2614303565b60200260200101516125fa565b9050846001600160a01b0316816001600160a01b031603611de957611ddf838381518110611a1c57611a1c614303565b935050505061195f565b50611df38161432f565b9050611d6d565b506060949350505050565b91821c91600080611e19600180861b6147b3565b909416949350505050565b6060611e2f82612614565b611e3857600080fd5b6000611e438361264f565b90506000816001600160401b03811115611e5f57611e5f612c5d565b604051908082528060200260200182016040528015611e9857816020015b611e85612b5a565b815260200190600190039081611e7d5790505b5090506000611eaa85602001516126d4565b8560200151611eb99190614621565b90506000805b84811015611f2257611ed08361274f565b9150604051806040016040528083815260200184815250848281518110611ef957611ef9614303565b6020908102919091010152611f0e8284614621565b925080611f1a8161432f565b915050611ebf565b509195945050505050565b6000806000611f3f84602001516126d4565b90506000818560200151611f539190614621565b90506000828660000151611f6791906147b3565b9196919550909350505050565b611f7c612bbf565b611f84612bbf565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015611fd65780611fd28161432f565b9150505b8160e0015161271014611ff15780611fed8161432f565b9150505b8161010001516127101461200d57806120098161432f565b9150505b6101408201515115158061202657506101608201515115155b8061203657506101a08201515115155b156120a857600082610160015151836101400151511161207b57826101a0015151836101600151511161206f57826101a0015151612083565b82610160015151612083565b826101400151515b905061209081600461460a565b61209a9083614621565b60ff90911661012084015290505b6120d26040518060600160405280602e81526020016147fb602e913983610120015160ff16611965565b806001600160401b038111156120ea576120ea612c5d565b604051908082528060200260200182016040528015612113578160200160208202803683370190505b50835281516121239084906127f3565b61213183836020015161284b565b61213f83836060015161288c565b61214d8383604001516128db565b61215c8383610120015161291f565b61217d60405180606001604052806025815260200161482960259139611910565b60008060019050836080015162ffffff16612710146121b2576121a48585608001516129b0565b6121af6001836147c6565b91505b8360a0015163ffffffff16612710146121e1576121d3858560a00151612a17565b6121de6002836147c6565b91505b60c0840151156122275760c08401518551826121fc8161432f565b93508151811061220e5761220e614303565b60209081029190910101526122246004836147c6565b91505b8360e00151612710146122705760e08401518551826122458161432f565b93508151811061225757612257614303565b602090810291909101015261226d6008836147c6565b91505b836101000151612710146122bb576101008401518551826122908161432f565b9350815181106122a2576122a2614303565b60209081029190910101526122b86010836147c6565b91505b61012084015160ff16156125a95760005b84610120015160ff16811015612577576000856101400151511180156122f757508461014001515181105b1561234e57846101400151818151811061231357612313614303565b60200260200101518660000151838061232b9061432f565b94508151811061233d5761233d614303565b60200260200101818152505061237c565b85516000908361235d8161432f565b94508151811061236f5761236f614303565b6020026020010181815250505b60008561016001515111801561239757508461016001515181105b156123ee5784610160015181815181106123b3576123b3614303565b6020026020010151866000015183806123cb9061432f565b9450815181106123dd576123dd614303565b60200260200101818152505061241c565b8551600090836123fd8161432f565b94508151811061240f5761240f614303565b6020026020010181815250505b60008561018001515111801561243757508461018001515181105b1561249157846101800151818151811061245357612453614303565b602002602001015160ff168660000151838061246e9061432f565b94508151811061248057612480614303565b6020026020010181815250506124be565b855181908361249f8161432f565b9450815181106124b1576124b1614303565b6020026020010181815250505b6000856101a00151511180156124d95750846101a001515181105b1561253957846101a0015181815181106124f5576124f5614303565b60200260200101516001600160a01b0316866000015183806125169061432f565b94508151811061252857612528614303565b602002602001018181525050612567565b8551600090836125488161432f565b94508151811061255a5761255a614303565b6020026020010181815250505b6125708161432f565b90506122cc565b506125836020836147c6565b91506125a960405180608001604052806044815260200161484e60449139865151611965565b6104228583612a8a565b6125bb612b5a565b50604080518082019091528151815260209182019181019190915290565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b805160009060151461260b57600080fd5b61195f82611a4c565b8051600090810361262757506000919050565b6020820151805160001a9060c0821015612645575060009392505050565b5060019392505050565b8051600090810361266257506000919050565b60008061267284602001516126d4565b84602001516126819190614621565b90506000846000015185602001516126999190614621565b90505b808210156126cb576126ad8261274f565b6126b79083614621565b9150826126c38161432f565b93505061269c565b50909392505050565b8051600090811a60808110156126ed5750600092915050565b60b8811080612708575060c08110801590612708575060f881105b156127165750600192915050565b60c08110156127435761272b600160b86147e1565b6127389060ff16826147b3565b611236906001614621565b61272b600160f86147e1565b80516000908190811a608081101561276a57600191506104ff565b60b88110156127905761277e6080826147b3565b612789906001614621565b91506104ff565b60c08110156127bd5760b78103600185019450806020036101000a855104600182018101935050506104ff565b60f88110156127d15761277e60c0826147b3565b60019390930151602084900360f7016101000a900490920160f5190192915050565b612828826000015160008151811061280d5761280d614303565b60200260200101518260ff16600860ff16600060ff16612ada565b8251805160009061283b5761283b614303565b6020026020010181815250505050565b612828826000015160008151811061286557612865614303565b60200260200101518260ff16600460ff16600060086128849190614752565b60ff16612ada565b61282882600001516000815181106128a6576128a6614303565b60200260200101518260ff16600460ff16600060086128c59190614752565b6128d0906004614752565b612884906008614752565b61282882600001516000815181106128f5576128f5614303565b60200260200101518260ff16600860ff16600060086129149190614752565b612884906004614752565b612828826000015160008151811061293957612939614303565b60200260200101518260ff16600860ff16600060086129589190614752565b612963906004614752565b61296e906008614752565b612979906004614752565b612984906010614752565b61298f906018614752565b61299a906020614752565b6129a5906020614752565b612884906020614752565b61282882600001516000815181106129ca576129ca614303565b60200260200101518262ffffff16601860ff16600060086129eb9190614752565b6129f6906004614752565b612a01906008614752565b612a0c906004614752565b612884906010614752565b6128288260000151600081518110612a3157612a31614303565b60200260200101518263ffffffff16602060ff1660006008612a539190614752565b612a5e906004614752565b612a69906008614752565b612a74906004614752565b612a7f906010614752565b612884906018614752565b6128288260000151600081518110612aa457612aa4614303565b60200260200101518261ffff16601060ff1660006008612ac49190614752565b612acf906004614752565b612914906008614752565b600083821b8183612aee600180881b6147b3565b901b19969096161795945050505050565b604080516080810182526000808252602082015260609181018290528181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215612baf579160200282015b82811115612baf578251825591602001919060010190612b94565b50612bbb929150612c48565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115612bbb5760008155600101612c49565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612c9657612c96612c5d565b60405290565b60405160a081016001600160401b0381118282101715612c9657612c96612c5d565b604080519081016001600160401b0381118282101715612c9657612c96612c5d565b604051608081016001600160401b0381118282101715612c9657612c96612c5d565b60405161018081016001600160401b0381118282101715612c9657612c96612c5d565b604051606081016001600160401b0381118282101715612c9657612c96612c5d565b60405161016081016001600160401b0381118282101715612c9657612c96612c5d565b604051601f8201601f191681016001600160401b0381118282101715612d9257612d92612c5d565b604052919050565b80356001600160a01b03811681146118dc57600080fd5b803563ffffffff811681146118dc57600080fd5b803560ff811681146118dc57600080fd5b803561ffff811681146118dc57600080fd5b60006101408284031215612dfb57600080fd5b612e03612c73565b612e0c83612d9a565b8152612e1a60208401612d9a565b6020820152612e2b60408401612d9a565b6040820152612e3c60608401612db1565b6060820152612e4d60808401612db1565b6080820152612e5e60a08401612d9a565b60a0820152612e6f60c08401612dc5565b60c0820152612e8060e08401612dd6565b60e0820152610100612e93818501612dc5565b90820152610120612ea5848201612dc5565b908201529392505050565b60006001600160401b03821115612ec957612ec9612c5d565b50601f01601f191660200190565b600082601f830112612ee857600080fd5b8135612efb612ef682612eb0565b612d6a565b818152846020838601011115612f1057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215612f4a57600080fd5b612f5389612d9a565b9750612f6160208a01612d9a565b9650612f6f60408a01612d9a565b9550612f7d60608a01612db1565b9450612f8b60808a01612d9a565b9350612f9960a08a01612db1565b925060c08901356001600160401b03811115612fb457600080fd5b612fc08b828c01612ed7565b925050612fcf60e08a01612dd6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156130235783518252928401926001929092019190840190613003565b509695505050505050565b60005b83811015613049578181015183820152602001613031565b50506000910152565b6000815180845261306a81602086016020860161302e565b601f01601f19169290920160200192915050565b6020815260006112366020830184613052565b60008060008060008060c087890312156130aa57600080fd5b6130b387612d9a565b95506130c160208801612d9a565b94506130cf60408801612db1565b93506130dd60608801612d9a565b92506130eb60808801612db1565b91506130f960a08801612dd6565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156131465783516001600160a01b031683529284019291840191600101613121565b50909695505050505050565b6000806000806080858703121561316857600080fd5b61317185612db1565b935061317f60208601612dd6565b925061318d60408601612dc5565b915060608501356001600160401b038111156131a857600080fd5b6131b487828801612ed7565b91505092959194509250565b60006001600160401b038211156131d9576131d9612c5d565b5060051b60200190565b600060208083850312156131f657600080fd5b82356001600160401b038082111561320d57600080fd5b818501915085601f83011261322157600080fd5b813561322f612ef6826131c0565b81815260059190911b8301840190848101908883111561324e57600080fd5b8585015b8381101561039b5780358581111561326a5760008081fd5b6132788b89838a0101612ed7565b845250918601918601613252565b600080600080600060a0868803121561329e57600080fd5b6132a786612db1565b94506132b560208701612dd6565b93506132c360408701612dd6565b92506132d160608701612dc5565b915060808601356001600160401b038111156132ec57600080fd5b6132f888828901612ed7565b9150509295509295909350565b600082601f83011261331657600080fd5b81356020613326612ef6836131c0565b82815260059290921b8401810191818101908684111561334557600080fd5b8286015b848110156130235780356001600160401b038082111561336857600080fd5b9088019060a0828b03601f1901121561338057600080fd5b613388612c9c565b613393878401612dc5565b815260406133a2818501612d9a565b888301526060840135818301526080840135606083015260a0840135838111156133cc5760008081fd5b8085019450508b603f8501126133e457600092508283fd5b8784013592506133f6612ef6846131c0565b83815260069390931b8401810192888101908d8511156134165760008081fd5b948201945b8486101561346d5782868f0312156134335760008081fd5b61343b612cbe565b61344487612db1565b81528a8701358060040b811461345a5760008081fd5b818c01528252948201949089019061341b565b6080840152505085525050918301918301613349565b60006080828403121561349557600080fd5b61349d612ce0565b90506134a882612d9a565b81526134b660208301612dc5565b602082015260408201356001600160401b03808211156134d557600080fd5b6134e185838601612ed7565b604084015260608401359150808211156134fa57600080fd5b5061350784828501612ed7565b60608301525092915050565b6000806040838503121561352657600080fd5b82356001600160401b038082111561353d57600080fd5b9084019060a0828703121561355157600080fd5b613559612c9c565b61356283612d9a565b815261357060208401612d9a565b602082015261358160408401612d9a565b604082015260608301358281111561359857600080fd5b830161018081890312156135ab57600080fd5b6135b3612d02565b6135bc82612d9a565b81526135ca60208301612d9a565b60208201526135db60408301612d9a565b60408201526135ec60608301612d9a565b60608201526080820135608082015260a082013560a082015261361160c08301612db1565b60c082015261362260e08301612db1565b60e0820152610100613635818401612db1565b90820152610120613647838201612dc5565b90820152610140828101358581111561365f57600080fd5b61366b8b828601613305565b828401525050610160808301358581111561368557600080fd5b6136918b828601612ed7565b82840152505080606084015250506136ab60808401612dc5565b6080820152935060208501359150808211156136c657600080fd5b506136d385828601613483565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261371860a0840182613052565b90506060840151601f198483030160808501526111098282613052565b600082601f83011261374657600080fd5b81356020613756612ef6836131c0565b82815260059290921b8401810191818101908684111561377557600080fd5b8286015b848110156130235780358352918301918301613779565b600082601f8301126137a157600080fd5b813560206137b1612ef6836131c0565b82815260059290921b840181019181810190868411156137d057600080fd5b8286015b84811015613023576137e581612d9a565b83529183019183016137d4565b600082601f83011261380357600080fd5b81356020613813612ef6836131c0565b82815260059290921b8401810191818101908684111561383257600080fd5b8286015b848110156130235780356001600160401b038082111561385557600080fd5b90880190601f196080838c038201121561386e57600080fd5b613876612ce0565b878401358381111561388757600080fd5b84016060818e038401121561389b57600080fd5b6138a3612d25565b92506138b0898201612dc5565b835260406138bf818301612d9a565b8a8501526060820135858111156138d557600080fd5b6138e38f8c83860101613735565b82860152508383526138f6818701612dc5565b8a840152606086013593508484111561390e57600080fd5b61391c8e8b86890101613790565b9083015250608084013591508282111561393557600080fd5b6139438c8984870101613735565b60608201528652505050918301918301613836565b600082601f83011261396957600080fd5b81356020613979612ef6836131c0565b82815260059290921b8401810191818101908684111561399857600080fd5b8286015b848110156130235780356001600160401b038111156139bb5760008081fd5b6139c98986838b0101612ed7565b84525091830191830161399c565b600082601f8301126139e857600080fd5b813560206139f8612ef6836131c0565b82815260059290921b84018101918181019086841115613a1757600080fd5b8286015b848110156130235780356001600160401b0380821115613a3b5760008081fd5b9088019060a0828b03601f1901811315613a555760008081fd5b613a5d612c9c565b8784013583811115613a6f5760008081fd5b613a7d8d8a838801016137f2565b8252506040613a8d818601612dc5565b898301526060613a9e818701612d9a565b82840152608091508186013585811115613ab85760008081fd5b613ac68f8c838a0101613790565b82850152505082850135925083831115613ae05760008081fd5b613aee8d8a85880101613958565b908201528652505050918301918301613a1b565b600082601f830112613b1357600080fd5b81356020613b23612ef6836131c0565b82815260059290921b84018101918181019086841115613b4257600080fd5b8286015b8481101561302357613b5781612dc5565b8352918301918301613b46565b80356001600160401b03811681146118dc57600080fd5b600082601f830112613b8c57600080fd5b81356020613b9c612ef6836131c0565b82815260059290921b84018101918181019086841115613bbb57600080fd5b8286015b848110156130235780356001600160401b0380821115613bdf5760008081fd5b90880190610160828b03601f1901811315613bfa5760008081fd5b613c02612d47565b613c0d888501612dd6565b81526040613c1c818601612dd6565b898301526060613c2d818701612dc5565b8284015260809150613c40828701612db1565b9083015260a0613c51868201612dc5565b8284015260c09150613c64828701612db1565b9083015260e0613c75868201612db1565b828401526101009150613c89828701613b64565b908301526101208581013585811115613ca25760008081fd5b613cb08f8c838a0101613790565b838501525061014091508186013585811115613ccc5760008081fd5b613cda8f8c838a0101613958565b828501525050613ceb838601612d9a565b908201528652505050918301918301613bbf565b600082601f830112613d1057600080fd5b81356020613d20612ef6836131c0565b82815260059290921b84018101918181019086841115613d3f57600080fd5b8286015b848110156130235780356001600160401b0380821115613d635760008081fd5b9088019060a0828b03601f1901811315613d7d5760008081fd5b613d85612c9c565b613d90888501612db1565b815260408085013584811115613da65760008081fd5b613db48e8b83890101612ed7565b8a8401525060608086013585811115613dcd5760008081fd5b613ddb8f8c838a0101612ed7565b8385015250608091508186013585811115613df65760008081fd5b613e048f8c838a0101612ed7565b828501525050613e15838601612dc5565b908201528652505050918301918301613d43565b60008060408385031215613e3c57600080fd5b613e4583612db1565b915060208301356001600160401b0380821115613e6157600080fd5b908401906101608287031215613e7657600080fd5b613e7e612d47565b823582811115613e8d57600080fd5b613e99888286016139d7565b825250602083013582811115613eae57600080fd5b613eba88828601613b02565b602083015250604083013582811115613ed257600080fd5b613ede88828601613b7b565b604083015250606083013582811115613ef657600080fd5b613f0288828601613cff565b606083015250608083013582811115613f1a57600080fd5b613f2688828601613b02565b60808301525060a083013582811115613f3e57600080fd5b613f4a88828601613790565b60a08301525060c083013582811115613f6257600080fd5b613f6e88828601613790565b60c083015250613f8060e08401612db1565b60e0820152610100613f93818501612db1565b90820152610120613fa5848201612dc5565b908201526101408381013583811115613fbd57600080fd5b613fc989828701612ed7565b8284015250508093505050509250929050565b600060208284031215613fee57600080fd5b81356001600160401b038082111561400557600080fd5b90830190610160828603121561401a57600080fd5b614022612d47565b61402b83612d9a565b815261403960208401612d9a565b602082015261404a60408401612db1565b604082015261405b60608401612dd6565b606082015261406c60808401612dd6565b608082015261407d60a08401612dc5565b60a082015261408e60c08401612d9a565b60c082015261409f60e08401612db1565b60e08201526101006140b2818501612d9a565b908201526101206140c4848201612dc5565b9082015261014083810135838111156140dc57600080fd5b6140e888828701612ed7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561414e57603f1988860301845261413c858351613052565b94509285019290850190600101614120565b5092979650505050505050565b60006020828403121561416d57600080fd5b81356001600160401b0381111561418357600080fd5b611a9284828501613790565b6000806000606084860312156141a457600080fd5b6141ad84612db1565b92506141bb60208501612dd6565b91506141c960408501612dc5565b90509250925092565b6000602082840312156141e457600080fd5b61123682612d9a565b600081518084526020808501945080840160005b8381101561422057815160ff1687529582019590820190600101614201565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156142a257888303603f1901855281518051878552614276888601826141ed565b91890151858303868b015291905061428e81836141ed565b968901969450505090860190600101614252565b509098975050505050505050565b600082516142c281846020870161302e565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161434157614341614319565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b8681526001600160a01b038681166020808401919091528682166040840152908516606083015260c06080830181905284519083018190526000918581019160e0850190845b81811015614401578451835293830193918301916001016143e5565b50508093505050508260a0830152979650505050505050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b8281526101008101611236602083018461441a565b805180151581146118dc57600080fd5b6000602082840312156144ba57600080fd5b61123682614498565b600080604083850312156144d657600080fd5b6144df83614498565b9150602083015190509250929050565b600061014060ff8716835285602084015280604084015261451281840186613052565b915050611109606083018461441a565b6000614530612ef684612eb0565b905082815283838301111561454457600080fd5b61123683602083018461302e565b6000602080838503121561456557600080fd5b82516001600160401b038082111561457c57600080fd5b818501915085601f83011261459057600080fd5b815161459e612ef6826131c0565b81815260059190911b830184019084810190888311156145bd57600080fd5b8585015b8381101561039b578051858111156145d95760008081fd5b8601603f81018b136145eb5760008081fd5b6145fc8b8983015160408401614522565b8452509186019186016145c1565b808202811582820484141761195f5761195f614319565b8082018082111561195f5761195f614319565b60006101008201905084825283602083015263ffffffff8084511660408401528060208501511660608401528060408501511660808401528060608501511660a0840152608084015160c08401528060a08501511660e084015250949350505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6040815260006147436040830185613052565b90508260208301529392505050565b60ff818116838216019081111561195f5761195f614319565b60006020828403121561477d57600080fd5b81516001600160401b0381111561479357600080fd5b8201601f810184136147a457600080fd5b611a9284825160208401614522565b8181038181111561195f5761195f614319565b61ffff8181168382160190808211156104ff576104ff614319565b60ff828116828216039081111561195f5761195f61431956fe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a264697066735822122044e870958f2428ae3421d61cbe56578f45b050c6114d7490fa8f0e2123c9524d64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
