{
  "contractName": "Controller",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint64[2]",
          "name": "_termParams",
          "type": "uint64[2]"
        },
        {
          "internalType": "address[3]",
          "name": "_governors",
          "type": "address[3]"
        },
        {
          "internalType": "contract ERC20",
          "name": "_feeToken",
          "type": "address"
        },
        {
          "internalType": "uint256[3]",
          "name": "_fees",
          "type": "uint256[3]"
        },
        {
          "internalType": "uint64[5]",
          "name": "_roundStateDurations",
          "type": "uint64[5]"
        },
        {
          "internalType": "uint16[2]",
          "name": "_pcts",
          "type": "uint16[2]"
        },
        {
          "internalType": "uint64[4]",
          "name": "_roundParams",
          "type": "uint64[4]"
        },
        {
          "internalType": "uint256[2]",
          "name": "_appealCollateralParams",
          "type": "uint256[2]"
        },
        {
          "internalType": "uint256",
          "name": "_minActiveBalance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "AutomaticWithdrawalsAllowedChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousGovernor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "currentGovernor",
          "type": "address"
        }
      ],
      "name": "ConfigGovernorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "signature",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "CustomFunctionSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousGovernor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "currentGovernor",
          "type": "address"
        }
      ],
      "name": "FundsGovernorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "previousTermId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "currentTermId",
          "type": "uint64"
        }
      ],
      "name": "Heartbeat",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "ModuleDisabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "ModuleEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "ModuleSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousGovernor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "currentGovernor",
          "type": "address"
        }
      ],
      "name": "ModulesGovernorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "fromTermId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "protocolConfigId",
          "type": "uint64"
        }
      ],
      "name": "NewConfig",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "previousStartTime",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "currentStartTime",
          "type": "uint64"
        }
      ],
      "name": "StartTimeDelayed",
      "type": "event"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_holder",
          "type": "address"
        }
      ],
      "name": "areWithdrawalsAllowedFor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IModuleCache[]",
          "name": "_modules",
          "type": "address[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "_ids",
          "type": "bytes32[]"
        }
      ],
      "name": "cacheModules",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newConfigGovernor",
          "type": "address"
        }
      ],
      "name": "changeConfigGovernor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newFundsGovernor",
          "type": "address"
        }
      ],
      "name": "changeFundsGovernor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_newModulesGovernor",
          "type": "address"
        }
      ],
      "name": "changeModulesGovernor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_newFirstTermStartTime",
          "type": "uint64"
        }
      ],
      "name": "delayStartTime",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "disableModule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "ejectFundsGovernor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "ejectModulesGovernor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "enableModule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "ensureCurrentTerm",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "ensureCurrentTermRandomness",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_termId",
          "type": "uint64"
        }
      ],
      "name": "getConfig",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "feeToken",
          "type": "address"
        },
        {
          "internalType": "uint256[3]",
          "name": "fees",
          "type": "uint256[3]"
        },
        {
          "internalType": "uint64[5]",
          "name": "roundStateDurations",
          "type": "uint64[5]"
        },
        {
          "internalType": "uint16[2]",
          "name": "pcts",
          "type": "uint16[2]"
        },
        {
          "internalType": "uint64[4]",
          "name": "roundParams",
          "type": "uint64[4]"
        },
        {
          "internalType": "uint256[2]",
          "name": "appealCollateralParams",
          "type": "uint256[2]"
        },
        {
          "internalType": "uint256",
          "name": "minActiveBalance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getConfigChangeTermId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getConfigGovernor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentTermId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDisputeManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_termId",
          "type": "uint64"
        }
      ],
      "name": "getDraftConfig",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "feeToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "draftFee",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "penaltyPct",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getFundsGovernor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getGuardiansRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLastEnsuredTermId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_termId",
          "type": "uint64"
        }
      ],
      "name": "getMinActiveBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "getModule",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "getModuleByAddress",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getModulesGovernor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getNeededTermTransitions",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPaymentsBook",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_termId",
          "type": "uint64"
        }
      ],
      "name": "getTerm",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "startTime",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "randomnessBN",
          "type": "uint64"
        },
        {
          "internalType": "bytes32",
          "name": "randomness",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTermDuration",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_termId",
          "type": "uint64"
        }
      ],
      "name": "getTermRandomness",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTreasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getVoting",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "disabled",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_maxRequestedTransitions",
          "type": "uint64"
        }
      ],
      "name": "heartbeat",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "_allowed",
          "type": "bool"
        }
      ],
      "name": "setAutomaticWithdrawals",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_fromTermId",
          "type": "uint64"
        },
        {
          "internalType": "contract ERC20",
          "name": "_feeToken",
          "type": "address"
        },
        {
          "internalType": "uint256[3]",
          "name": "_fees",
          "type": "uint256[3]"
        },
        {
          "internalType": "uint64[5]",
          "name": "_roundStateDurations",
          "type": "uint64[5]"
        },
        {
          "internalType": "uint16[2]",
          "name": "_pcts",
          "type": "uint16[2]"
        },
        {
          "internalType": "uint64[4]",
          "name": "_roundParams",
          "type": "uint64[4]"
        },
        {
          "internalType": "uint256[2]",
          "name": "_appealCollateralParams",
          "type": "uint256[2]"
        },
        {
          "internalType": "uint256",
          "name": "_minActiveBalance",
          "type": "uint256"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_sig",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        }
      ],
      "name": "setCustomFunction",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "setModule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_ids",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_addresses",
          "type": "address[]"
        }
      ],
      "name": "setModules",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162004d1738038062004d1783398181016040526102e08110156200003857600080fd5b5060a08101516102c082015160408301919060c08401906101208501906101c0860190610200870190610280880190868686868686868f60008181602002015190506000826001602002015190506301e133806001600160401b0316826001600160401b0316106040518060400160405280601a81526020017f434c4b5f5445524d5f4455524154494f4e5f544f4f5f4c4f4e4700000000000081525090620001625760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001265781810151838201526020016200010c565b50505050905090810190601f168015620001545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5081620001776001600160e01b03620003aa16565b016001600160401b0316816001600160401b031610156040518060400160405280601d81526020017f434c4b5f4241445f46495253545f5445524d5f53544152545f54494d4500000081525090620002125760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b506303c267006200022b6001600160e01b03620003aa16565b016001600160401b0316816001600160401b031611156040518060400160405280601d81526020017f434c4b5f4241445f46495253545f5445524d5f53544152545f54494d4500000081525090620002c65760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b50600080546001600160401b038085166001600160401b0319928316178355918052600160208190527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49805495909403909216931692909217905590506200033060038262001096565b506200034e600080898989898989896001600160e01b03620003da16565b505050505050506200037b886000600381106200036757fe5b60200201516001600160e01b0362000eae16565b60208801516200038b9062000f18565b60408801516200039b9062000f82565b50505050505050505062001151565b6000620003d4620003c36001600160e01b0362000fec16565b62000ff060201b620037891760201c565b90505b90565b6001600160401b0389161580620004025750886001600160401b0316886001600160401b0316115b60405180604001604052806011815260200170434f4e465f544f4f5f4f4c445f5445524d60781b815250906200047b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b50815115801590620004905750602082015115155b6040518060400160405280601b81526020017f434f4e465f5a45524f5f434f4c4c41544552414c5f464143544f52000000000081525090620005155760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b50620005348460005b60200201516200108760201b620037761760201c565b6040518060400160405280601881526020017f434f4e465f494e56414c49445f50454e414c54595f504354000000000000000081525090620005b95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b50620005c78460016200051e565b6040518060400160405280602081526020017f434f4e465f494e56414c49445f46494e414c5f524f554e445f5245445f504354815250906200064c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b506000838160200201516001600160401b03161160405180606001604052806021815260200162004cf66021913990620006c95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b50600083600160200201516001600160401b0316116040518060400160405280601b81526020017f434f4e465f4241445f41505045414c5f535445505f464143544f52000000000081525090620007635760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b5060408301516001600160401b031660008115801590620007855750600a8211155b9050806040518060400160405280601e81526020017f434f4e465f494e56414c49445f4d41585f41505045414c5f524f554e44530000815250906200080d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b5060005b6005811015620008f05760008882600581106200082a57fe5b60200201516001600160401b03161180156200086157506121de8882600581106200085157fe5b60200201516001600160401b0316105b6040518060400160405280601f81526020017f434f4e465f4c415247455f524f554e445f50484153455f4455524154494f4e0081525090620008e65760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b5060010162000811565b5060408051808201909152601c81527f434f4e465f5a45524f5f4d494e5f4143544956455f42414c414e434500000000602082015283620009745760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b506002546001600160401b03808d1691161115620009ad576002546001600160401b0316600090815260046020526040812055620009c3565b6003805490620009c1906001830162001096565b505b600380546000198101916000916001600160401b038416908110620009e457fe5b90600052602060002090600b020190506040518060a001604052808c6001600160a01b031681526020018960016002811062000a1c57fe5b602002015161ffff1681526020018b60006003811062000a3857fe5b602002015181526020018b60016003811062000a5057fe5b602002015181526020018b60026003811062000a6857fe5b60209081029190910151909152815183549183015161ffff16600160a01b0261ffff60a01b196001600160a01b039092166001600160a01b03199093169290921716178255604080820151600184015560608201516002840155608090910151600383015580516101808101909152808a600060200201516001600160401b031681526020018a60016005811062000afc57fe5b60200201516001600160401b031681526020018a60026005811062000b1d57fe5b60200201516001600160401b031681526020018a60036005811062000b3e57fe5b60200201516001600160401b031681526020018a60046005811062000b5f57fe5b60200201516001600160401b031681526020018960006002811062000b8057fe5b602002015161ffff1681526020018860006004811062000b9c57fe5b60200201516001600160401b031681526020018860016004811062000bbd57fe5b60200201516001600160401b031681526020018860036004811062000bde57fe5b60200201516001600160401b031681526020018581526020018760006002811062000c0557fe5b602002015181526020018760016002811062000c1d57fe5b60200201518152508160040160008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160000160106101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160010160086101000a81548161ffff021916908361ffff16021790555060c082015181600101600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160010160126101000a8154816001600160401b0302191690836001600160401b031602179055506101008201518160020160006101000a8154816001600160401b0302191690836001600160401b031602179055506101208201518160030155610140820151816004015561016082015181600501559050508481600a0181905550816001600160401b0316600460008e6001600160401b03166001600160401b03168152602001908152602001600020819055508b600260006101000a8154816001600160401b0302191690836001600160401b031602179055507ff991c74e88b00b8de409caf790045f133e9a8283d3b989db88e2b2d93612c3a78c8360405180836001600160401b03166001600160401b03168152602001826001600160401b03166001600160401b031681526020019250505060405180910390a150505050505050505050505050565b600654604080516001600160a01b039283168152918316602083015280517f2e8176039aca48fb2df80d8a3f0c25cf4f12ba7ba15aabe562bd39f71967954f9281900390910190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b039283168152918316602083015280517fad1fe49159fc13ce805cb23e72eb6724c008509c8095b9499752efea5747af3e9281900390910190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516001600160a01b039283168152918316602083015280517faf8bba87fb343f5755495c80323f32cd6bbfaebd666ff5abac709bc1f76f2f179281900390910190a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b4290565b60408051808201909152601581527f55494e5436345f4e554d4245525f544f4f5f424947000000000000000000000060208201526000906001600160401b03831115620010805760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620001265781810151838201526020016200010c565b5090919050565b61271061ffff82161115919050565b815481835581811115620010c557600b0281600b028360005260206000209182019101620010c59190620010ca565b505050565b620003d791905b808211156200114d5780546001600160b01b03191681556000600182018190556002820181905560038201819055600482018190556005820180546001600160d01b03191690556006820180546001600160401b0319169055600782018190556008820181905560098201819055600a820155600b01620010d1565b5090565b613b9580620011616000396000f3fe60806040526004361061021f5760003560e01c80636991fdb81161012e578063a95f5246116100ab578063db9bee461161006f578063db9bee4614610ac3578063e008cb6214610ad8578063e36057b714610c0a578063f137b44e14610c3d578063f7fe578914610c9a5761021f565b8063a95f5246146109dc578063ca0f8f3b14610a0f578063cf0a5af314610a48578063d7a8469314610a5d578063d9296df214610a905761021f565b80638de10e87116100f25780638de10e87146108c857806395f3c2da146108fb57806397023f811461092e5780639bf6fa5714610943578063a949e982146109765761021f565b80636991fdb8146108335780637d1f24c9146108485780637fb011d61461085d57806385acd641146108895780638c8bd218146108b35761021f565b80633c28e88b116101bc57806350cc0ae11161018057806350cc0ae114610658578063541cd46814610723578063610b59251461075c57806361f3be6a1461078f57806369667005146107d45761021f565b80633c28e88b146105d35780633df50c63146106045780633f33bf8614610619578063408a26401461062e57806350c36580146106435761021f565b80620be6ea1461038857806308135a93146103c05780631986d376146103f15780631a7dc8701461040657806322f8f6f31461044b57806324bdf7131461046057806327fe748c1461052b5780633044e70a146105725780633b19e84a146105be575b600080356001600160e01b0319168152600b6020908152604091829020548251808401909352601b83527f4354525f435553544f4d5f46554e4354494f4e5f4e4f545f5345540000000000918301919091526001600160a01b031690816103045760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102c95781810151838201526020016102b1565b50505050905090810190601f1680156102f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000816001600160a01b031634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610366576040519150601f19603f3d011682016040523d82523d6000602084013e61036b565b606091505b505090503d604051816000823e82808015610384578383f35b8383fd5b34801561039457600080fd5b5061039d610caf565b604080516001600160a01b03909316835290151560208301528051918290030190f35b3480156103cc57600080fd5b506103d5610ce3565b604080516001600160401b039092168252519081900360200190f35b3480156103fd57600080fd5b5061039d610cf3565b34801561041257600080fd5b506104496004803603604081101561042957600080fd5b5080356001600160e01b03191690602001356001600160a01b0316610d1f565b005b34801561045757600080fd5b506103d5610e0e565b34801561046c57600080fd5b506104496004803603604081101561048357600080fd5b810190602081018135600160201b81111561049d57600080fd5b8201836020820111156104af57600080fd5b803590602001918460208302840111600160201b831117156104d057600080fd5b919390929091602081019035600160201b8111156104ed57600080fd5b8201836020820111156104ff57600080fd5b803590602001918460208302840111600160201b8311171561052057600080fd5b509092509050610e1d565b34801561053757600080fd5b5061055e6004803603602081101561054e57600080fd5b50356001600160a01b0316610f6e565b604080519115158252519081900360200190f35b34801561057e57600080fd5b506105a56004803603602081101561059557600080fd5b50356001600160a01b0316610f90565b6040805192835290151560208301528051918290030190f35b3480156105ca57600080fd5b5061039d610fb9565b3480156105df57600080fd5b506105e8610fe5565b604080516001600160a01b039092168252519081900360200190f35b34801561061057600080fd5b5061039d610ff4565b34801561062557600080fd5b506103d5611020565b34801561063a57600080fd5b506105e861102a565b34801561064f57600080fd5b506103d5611039565b34801561066457600080fd5b506104496004803603604081101561067b57600080fd5b810190602081018135600160201b81111561069557600080fd5b8201836020820111156106a757600080fd5b803590602001918460208302840111600160201b831117156106c857600080fd5b919390929091602081019035600160201b8111156106e557600080fd5b8201836020820111156106f757600080fd5b803590602001918460208302840111600160201b8311171561071857600080fd5b509092509050611043565b34801561072f57600080fd5b506104496004803603604081101561074657600080fd5b50803590602001356001600160a01b0316611314565b34801561076857600080fd5b506104496004803603602081101561077f57600080fd5b50356001600160a01b031661139f565b34801561079b57600080fd5b506107c2600480360360208110156107b257600080fd5b50356001600160401b031661151a565b60408051918252519081900360200190f35b3480156107e057600080fd5b50610807600480360360208110156107f757600080fd5b50356001600160401b03166115c1565b604080516001600160a01b039094168452602084019290925261ffff1682820152519081900360600190f35b34801561083f57600080fd5b506103d56115e9565b34801561085457600080fd5b506107c26115f8565b34801561086957600080fd5b506104496004803603602081101561088057600080fd5b503515156116cc565b34801561089557600080fd5b5061039d600480360360208110156108ac57600080fd5b5035611722565b3480156108bf57600080fd5b50610449611737565b3480156108d457600080fd5b50610449600480360360208110156108eb57600080fd5b50356001600160a01b03166117c0565b34801561090757600080fd5b506107c26004803603602081101561091e57600080fd5b50356001600160401b03166118c1565b34801561093a57600080fd5b506105e86118d8565b34801561094f57600080fd5b506103d56004803603602081101561096657600080fd5b50356001600160401b03166118e7565b34801561098257600080fd5b50610449600480360361026081101561099a57600080fd5b506001600160401b03813516906001600160a01b0360208201351690604081019060a081019061014081019061018081019061020081019061024001356118f8565b3480156109e857600080fd5b50610449600480360360208110156109ff57600080fd5b50356001600160a01b0316611a51565b348015610a1b57600080fd5b5061055e60048036036040811015610a3257600080fd5b50803590602001356001600160a01b0316611bd1565b348015610a5457600080fd5b50610449611c06565b348015610a6957600080fd5b5061044960048036036020811015610a8057600080fd5b50356001600160a01b0316611c8d565b348015610a9c57600080fd5b5061044960048036036020811015610ab357600080fd5b50356001600160a01b0316611d8b565b348015610acf57600080fd5b5061039d611e89565b348015610ae457600080fd5b50610b0b60048036036020811015610afb57600080fd5b50356001600160401b0316611eb5565b6040516001600160a01b03881681526020810187606080838360005b83811015610b3f578181015183820152602001610b27565b5050505090500186600560200280838360005b83811015610b6a578181015183820152602001610b52565b5050505090500185600260200280838360005b83811015610b95578181015183820152602001610b7d565b5050505090500184600460200280838360005b83811015610bc0578181015183820152602001610ba8565b5050505090500183600260200280838360005b83811015610beb578181015183820152602001610bd3565b5050505090500182815260200197505050505050505060405180910390f35b348015610c1657600080fd5b5061044960048036036020811015610c2d57600080fd5b50356001600160401b0316611f0e565b348015610c4957600080fd5b50610c7060048036036020811015610c6057600080fd5b50356001600160401b0316611f94565b604080516001600160401b0394851681529290931660208301528183015290519081900360600190f35b348015610ca657600080fd5b506103d5611fc8565b600080610cdb7f8af7b7118de65da3b974a3fd4b0c702b66442f74b9dff6eaed1037254c0b79fe611fd2565b915091509091565b6000610ced612006565b90505b90565b600080610cdb7f7cbb12e82a6d63ff16fe43977f43e3e2b247ecd4e62c0e340da8800a48c67346611fd2565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314610d9b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160e01b031982166000818152600b602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582519384529083015280517f963ffecd07ecedcf6058ec0ca1bc68d292acd47448528e50af48ea5167c8a6fb9281900390910190a15050565b6000546001600160401b031690565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314610e995760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601e81527f4354525f494e56414c49445f494d504c535f494e5055545f4c454e47544800006020820152838214610f1c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060005b83811015610f6757610f5f858583818110610f3757fe5b90506020020135848484818110610f4a57fe5b905060200201356001600160a01b031661202c565b600101610f20565b5050505050565b6001600160a01b03811660009081526005602052604090205460ff165b919050565b6001600160a01b03166000908152600a602052604090208054600190910154909160ff90911690565b600080610cdb7f06aa03964db1f7257357ef09714a5f0ca3633723df419e97015e0c7a3e83edb7611fd2565b6006546001600160a01b031690565b600080610cdb7ffa275b1417437a2a2ea8e91e9fe73c28eaf0a28532a250541da5ac0d1892b418611fd2565b6000610ced612130565b6008546001600160a01b031690565b6000610ced6121fe565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146110bf5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5080158015906110ce57508215155b6040518060400160405280601e81526020017f4354525f494e56414c49445f494d504c535f494e5055545f4c454e4754480000815250906111505760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051828152602080840282010190915260609082801561117d578160200160208202803883390190505b50905060005b828110156112095760006009600086868581811061119d57fe5b602090810292909201358352508181019290925260409081016000908120546001600160a01b0316808252600a909352209091506111da81612270565b818484815181106111e757fe5b6001600160a01b03909216602092830291909101909101525050600101611183565b5060005b8481101561130c5785858281811061122157fe5b905060200201356001600160a01b03166001600160a01b0316634e112d368585856040518463ffffffff1660e01b815260040180806020018060200183810383528686828181526020019250602002808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b838110156112c05781810151838201526020016112a8565b5050505090500195505050505050600060405180830381600087803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b50506001909201915061120d9050565b505050505050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146113905760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5061139b828261202c565b5050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b0316331461141b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160a01b0381166000908152600a6020526040902061143d81612270565b600181015460408051808201909152601a81527f4354525f4d4f44554c455f414c52454144595f454e41424c454400000000000060208201529060ff166114c55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060018101805460ff191690558054604080519182526001600160a01b038416602083015280517f76a633d819bc10acca13779c3321738b6d0b0688ba75a006a8ef807dd087f4c09281900390910190a15050565b6000805460408051808201909152601781527610d312d7d511549357d113d154d7d393d517d1561254d5604a1b602082015283916001600160401b03600160401b909104811690831611156115b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506115ba836122e7565b9392505050565b6000806000806115cf6123bb565b90506115db85826123d1565b935093509350509193909250565b6002546001600160401b031690565b60008054600160401b90046001600160401b0316808252600160208190526040832090810154801561162e579250610cf0915050565b6000611639846122e7565b60408051808201909152601f81527f434c4b5f5445524d5f52414e444f4d4e4553535f554e415641494c41424c45006020820152909150816116bc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060019092018290555091505090565b33600081815260056020908152604091829020805460ff1916851515908117909155825190815291517f189949428c2e58715ea2f0be0d702bc14e73743bdbb58814a595c19e1285c5be9281900390910190a250565b60008061172e83611fd2565b91509150915091565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146117b35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506117be6000612411565b565b6006546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b0316331461183c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b0382166118b45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be8161247b565b50565b6000806118cc6123bb565b90506115ba83826124e5565b6007546001600160a01b031690565b60006118f2826124fe565b92915050565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146119745760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600061197f612130565b9050611a46818a8a8a6003806020026040519081016040528092919082600360200280828437600092019190915250506040805160a081810190925291508c9060059083908390808284376000920191909152505060408051808201825291508c9060029083908390808284376000920191909152505060408051608081810190925291508c9060049083908390808284376000920191909152505060408051808201825291508c9060029083908390808284376000920191909152508c91506126f99050565b505050505050505050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611acd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160a01b0381166000908152600a60205260409020611aef81612270565b600181015460408051808201909152601b81527f4354525f4d4f44554c455f414c52454144595f44495341424c4544000000000060208201529060ff1615611b785760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001818101805460ff191690911790558054604080519182526001600160a01b038416602083015280517fe740336c1666075fb80157eb9fed64f7c246823957f469eb4db34be01449bfc99281900390910190a15050565b6001600160a01b0381166000908152600a60205260408120805484148015611bfe5750600181015460ff16155b949350505050565b6006546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611c825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506117be600061247b565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611d095760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b038216611d815760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be81612411565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611e075760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b038216611e7f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be81613182565b600080610cdb7f14a6c70f0f6d449c014c7bbc9e68e31e79e8474fb03b7194df83109a2d888ae6611fd2565b6000611ebf6139b0565b611ec76139ce565b611ecf6139ec565b611ed7613a0a565b611edf6139ec565b600080611eea6123bb565b9050611ef689826131ec565b959f949e50929c50909a509850965090945092505050565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611f8a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be816134a2565b6001600160401b039081166000908152600160208190526040909120805491015481831693600160401b9092049092169190565b6000610ced6123bb565b6000908152600960209081526040808320546001600160a01b0316808452600a90925290912060010154909160ff90911690565b6000610ced6120136121fe565b600054600160401b90046001600160401b031690613668565b612035816136fc565b6040518060400160405280601f81526020017f4354525f494d504c454d454e544154494f4e5f4e4f545f434f4e545241435400815250906120b75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600082815260096020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452600a83529281902085905580518581529182019290925281517f0669329f751b07de4aa82f60514a409d0dfaef266e791a4a65a95b07b1c4c324929181900390910190a15050565b60008061213b6121fe565b604080518082019091526018815277434c4b5f544f4f5f4d414e595f5452414e534954494f4e5360401b602082015290915060016001600160401b03831611156121c65760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160401b0381166121ef575050600054600160401b90046001600160401b0316610cf0565b6121f8816124fe565b91505090565b600080546001600160401b03600160401b9091048116825260016020526040822054168061222a61371b565b6001600160401b03161015612243576000915050610cf0565b6000546001600160401b03168161225861371b565b036001600160401b03168161226957fe5b0491505090565b805460408051808201909152601281527110d51497d353d115531157d393d517d4d15560721b60208201529061139b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b6001600160401b038082166000908152600160205260408120805491929091600160401b90041661231661372d565b6001600160401b0316116040518060400160405280601b81526020017f434c4b5f5445524d5f52414e444f4d4e4553535f4e4f545f5945540000000000815250906123a25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5054600160401b90046001600160401b03164092915050565b600054600160401b90046001600160401b031690565b6000806000806123e1868661373a565b805460028201546005909201546001600160a01b0390911698919750600160401b900461ffff1695509350505050565b600854604080516001600160a01b039283168152918316602083015280517faf8bba87fb343f5755495c80323f32cd6bbfaebd666ff5abac709bc1f76f2f179281900390910190a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b600654604080516001600160a01b039283168152918316602083015280517f2e8176039aca48fb2df80d8a3f0c25cf4f12ba7ba15aabe562bd39f71967954f9281900390910190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806124f2848461373a565b600a0154949350505050565b6000806125096121fe565b90506000816001600160401b0316846001600160401b03161061252c578161252e565b835b6001600160401b03169050600081116040518060400160405280601c81526020017f434c4b5f494e56414c49445f5452414e534954494f4e5f5445524d5300000000815250906125bf5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060006125ca61372d565b600054909150600160401b90046001600160401b03168060015b848111612684576001600160401b038083166000908152600160208190526040808320959091019283168252902090929061261e8461376d565b600054825461263f916001600160401b03918216911663ffffffff61366816565b815467ffffffffffffffff19166001600160401b039182161767ffffffffffffffff60401b1916600160401b60018981019390931602179091559190910190506125e4565b50600080546001600160401b03808416600160401b810267ffffffffffffffff60401b1990931692909217909255604080519285168352602083019190915280517fb8818b6d0c27e4fc7cf75de16ac2543426d3c0bcc520931d24e5a7dde4adca119281900390910190a19695505050505050565b6001600160401b03891615806127205750886001600160401b0316886001600160401b0316115b60405180604001604052806011815260200170434f4e465f544f4f5f4f4c445f5445524d60781b815250906127965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b508151158015906127aa5750602082015115155b6040518060400160405280601b81526020017f434f4e465f5a45524f5f434f4c4c41544552414c5f464143544f5200000000008152509061282c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5061283e8460005b6020020151613776565b6040518060400160405280601881526020017710d3d39197d253959053125117d411539053151657d410d560421b815250906128bb5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506128c7846001612834565b6040518060400160405280602081526020017f434f4e465f494e56414c49445f46494e414c5f524f554e445f5245445f504354815250906129495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506000838160200201516001600160401b031611604051806060016040528060218152602001613adf60219139906129c25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600083600160200201516001600160401b0316116040518060400160405280601b81526020017f434f4e465f4241445f41505045414c5f535445505f464143544f52000000000081525090612a595760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408301516001600160401b031660008115801590612a7a5750600a8211155b9050806040518060400160405280601e81526020017f434f4e465f494e56414c49445f4d41585f41505045414c5f524f554e4453000081525090612aff5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060005b6005811015612bda576000888260058110612b1a57fe5b60200201516001600160401b0316118015612b4f57506121de888260058110612b3f57fe5b60200201516001600160401b0316105b6040518060400160405280601f81526020017f434f4e465f4c415247455f524f554e445f50484153455f4455524154494f4e0081525090612bd15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600101612b03565b5060408051808201909152601c81527f434f4e465f5a45524f5f4d494e5f4143544956455f42414c414e434500000000602082015283612c5b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506002546001600160401b03808d1691161115612c92576002546001600160401b0316600090815260046020526040812055612ca6565b6003805490612ca49060018301613a28565b505b600380546000198101916000916001600160401b038416908110612cc657fe5b90600052602060002090600b020190506040518060a001604052808c6001600160a01b0316815260200189600160028110612cfd57fe5b602002015161ffff1681526020018b600060038110612d1857fe5b602002015181526020018b600160038110612d2f57fe5b602002015181526020018b600260038110612d4657fe5b60209081029190910151909152815183549183015161ffff16600160a01b0261ffff60a01b196001600160a01b039092166001600160a01b03199093169290921716178255604080820151600184015560608201516002840155608090910151600383015580516101808101909152808a600060200201516001600160401b031681526020018a600160058110612dd957fe5b60200201516001600160401b031681526020018a600260058110612df957fe5b60200201516001600160401b031681526020018a600360058110612e1957fe5b60200201516001600160401b031681526020018a600460058110612e3957fe5b60200201516001600160401b0316815260200189600060028110612e5957fe5b602002015161ffff16815260200188600060048110612e7457fe5b60200201516001600160401b0316815260200188600160048110612e9457fe5b60200201516001600160401b0316815260200188600360048110612eb457fe5b60200201516001600160401b0316815260200185815260200187600060028110612eda57fe5b6020020151815260200187600160028110612ef157fe5b60200201518152508160040160008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160000160106101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160010160086101000a81548161ffff021916908361ffff16021790555060c082015181600101600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160010160126101000a8154816001600160401b0302191690836001600160401b031602179055506101008201518160020160006101000a8154816001600160401b0302191690836001600160401b031602179055506101208201518160030155610140820151816004015561016082015181600501559050508481600a0181905550816001600160401b0316600460008e6001600160401b03166001600160401b03168152602001908152602001600020819055508b600260006101000a8154816001600160401b0302191690836001600160401b031602179055507ff991c74e88b00b8de409caf790045f133e9a8283d3b989db88e2b2d93612c3a78c8360405180836001600160401b03166001600160401b03168152602001826001600160401b03166001600160401b031681526020019250505060405180910390a150505050505050505050505050565b600754604080516001600160a01b039283168152918316602083015280517fad1fe49159fc13ce805cb23e72eb6724c008509c8095b9499752efea5747af3e9281900390910190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006131f66139b0565b6131fe6139ce565b6132066139ec565b61320e613a0a565b6132166139ec565b6000806132238a8a61373a565b905060008160000190508060000160009054906101000a90046001600160a01b03169850604051806060016040528082600101548152602001826002015481526020018260030154815250975060008260040190506040518060a001604052808260000160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160089054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160109054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160189054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260010160009054906101000a90046001600160401b03166001600160401b03166001600160401b0316815250975060405180604001604052808260010160089054906101000a900461ffff1661ffff1661ffff1681526020018360000160149054906101000a900461ffff1661ffff1661ffff168152509650604051806080016040528082600101600a9054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260010160129054906101000a90046001600160401b03166001600160401b03166001600160401b0316815260200182600301546001600160401b03166001600160401b031681526020018260020160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681525095506040518060400160405280826004015481526020018260050154815250945082600a0154935050505092959891949750929550565b6134aa612006565b6001600160401b0316600014604051806060016040528060218152602001613b00602191399061351b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506000808052600160205280547fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49805490929161356a916001600160401b03908116911663ffffffff61366816565b9050806001600160401b0316836001600160401b0316116040518060400160405280602081526020017f434c4b5f43414e4e4f545f44454c41595f504153545f53544152545f54494d45815250906136035760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600054825467ffffffffffffffff19166001600160401b0391821685038216178355604080518383168152918516602083015280517f9b735da8a0762c6e913df06587b4fa81f87b8075e2a2afdeae6afde9456fd8799281900390910190a1505050565b6040805180820190915260138152724d41544836345f4144445f4f564552464c4f5760681b6020820152600090838301906001600160401b0380861690831610156136f45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b509392505050565b60006001600160a01b03821661371457506000610f8b565b503b151590565b6000610ced613728613785565b613789565b6000610ced613728613815565b6000806137478484613819565b90506003818154811061375657fe5b90600052602060002090600b020191505092915050565b6118be816138a8565b61271061ffff82161115919050565b4290565b60408051808201909152601581527455494e5436345f4e554d4245525f544f4f5f42494760581b60208201526000906001600160401b0383111561380e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5090919050565b4390565b6000816001600160401b0316836001600160401b03161161385357506001600160401b0382166000908152600460205260409020546118f2565b6002546001600160401b039081169084168111613889576001600160401b031660009081526004602052604090205490506118f2565b50506001600160401b0316600090815260046020526040902054919050565b6001600160401b0381166000908152600460205260409020548061139b5760006004816138e56001600160401b038616600163ffffffff61391816565b6001600160401b039081168252602080830193909352604091820160009081205491871681526004909352912055505050565b6000826001600160401b0316826001600160401b03161115604051806040016040528060148152602001734d41544836345f5355425f554e444552464c4f5760601b815250906139a95760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5050900390565b60405180606001604052806003906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b60405180604001604052806002906020820280388339509192915050565b60405180608001604052806004906020820280388339509192915050565b815481835581811115613a5457600b0281600b028360005260206000209182019101613a549190613a59565b505050565b610cf091905b80821115613ada5780546001600160b01b03191681556000600182018190556002820181905560038201819055600482018190556005820180546001600160d01b031916905560068201805467ffffffffffffffff19169055600782018190556008820181905560098201819055600a820155600b01613a5f565b509056fe434f4e465f4241445f494e495449414c5f475541524449414e535f4e554d424552434c4b5f43414e4e4f545f44454c41595f535441525445445f50524f544f434f4c4354525f494e56414c49445f474f5645524e4f525f41444452455353000000004354525f53454e4445525f4e4f545f474f5645524e4f52000000000000000000a265627a7a72315820c97e42b1b77e4b0d14b9cf961d4575007a986a65e666759e97f7d5054831bc8d64736f6c63430005110032434f4e465f4241445f494e495449414c5f475541524449414e535f4e554d424552",
  "deployedBytecode": "0x60806040526004361061021f5760003560e01c80636991fdb81161012e578063a95f5246116100ab578063db9bee461161006f578063db9bee4614610ac3578063e008cb6214610ad8578063e36057b714610c0a578063f137b44e14610c3d578063f7fe578914610c9a5761021f565b8063a95f5246146109dc578063ca0f8f3b14610a0f578063cf0a5af314610a48578063d7a8469314610a5d578063d9296df214610a905761021f565b80638de10e87116100f25780638de10e87146108c857806395f3c2da146108fb57806397023f811461092e5780639bf6fa5714610943578063a949e982146109765761021f565b80636991fdb8146108335780637d1f24c9146108485780637fb011d61461085d57806385acd641146108895780638c8bd218146108b35761021f565b80633c28e88b116101bc57806350cc0ae11161018057806350cc0ae114610658578063541cd46814610723578063610b59251461075c57806361f3be6a1461078f57806369667005146107d45761021f565b80633c28e88b146105d35780633df50c63146106045780633f33bf8614610619578063408a26401461062e57806350c36580146106435761021f565b80620be6ea1461038857806308135a93146103c05780631986d376146103f15780631a7dc8701461040657806322f8f6f31461044b57806324bdf7131461046057806327fe748c1461052b5780633044e70a146105725780633b19e84a146105be575b600080356001600160e01b0319168152600b6020908152604091829020548251808401909352601b83527f4354525f435553544f4d5f46554e4354494f4e5f4e4f545f5345540000000000918301919091526001600160a01b031690816103045760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102c95781810151838201526020016102b1565b50505050905090810190601f1680156102f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000816001600160a01b031634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610366576040519150601f19603f3d011682016040523d82523d6000602084013e61036b565b606091505b505090503d604051816000823e82808015610384578383f35b8383fd5b34801561039457600080fd5b5061039d610caf565b604080516001600160a01b03909316835290151560208301528051918290030190f35b3480156103cc57600080fd5b506103d5610ce3565b604080516001600160401b039092168252519081900360200190f35b3480156103fd57600080fd5b5061039d610cf3565b34801561041257600080fd5b506104496004803603604081101561042957600080fd5b5080356001600160e01b03191690602001356001600160a01b0316610d1f565b005b34801561045757600080fd5b506103d5610e0e565b34801561046c57600080fd5b506104496004803603604081101561048357600080fd5b810190602081018135600160201b81111561049d57600080fd5b8201836020820111156104af57600080fd5b803590602001918460208302840111600160201b831117156104d057600080fd5b919390929091602081019035600160201b8111156104ed57600080fd5b8201836020820111156104ff57600080fd5b803590602001918460208302840111600160201b8311171561052057600080fd5b509092509050610e1d565b34801561053757600080fd5b5061055e6004803603602081101561054e57600080fd5b50356001600160a01b0316610f6e565b604080519115158252519081900360200190f35b34801561057e57600080fd5b506105a56004803603602081101561059557600080fd5b50356001600160a01b0316610f90565b6040805192835290151560208301528051918290030190f35b3480156105ca57600080fd5b5061039d610fb9565b3480156105df57600080fd5b506105e8610fe5565b604080516001600160a01b039092168252519081900360200190f35b34801561061057600080fd5b5061039d610ff4565b34801561062557600080fd5b506103d5611020565b34801561063a57600080fd5b506105e861102a565b34801561064f57600080fd5b506103d5611039565b34801561066457600080fd5b506104496004803603604081101561067b57600080fd5b810190602081018135600160201b81111561069557600080fd5b8201836020820111156106a757600080fd5b803590602001918460208302840111600160201b831117156106c857600080fd5b919390929091602081019035600160201b8111156106e557600080fd5b8201836020820111156106f757600080fd5b803590602001918460208302840111600160201b8311171561071857600080fd5b509092509050611043565b34801561072f57600080fd5b506104496004803603604081101561074657600080fd5b50803590602001356001600160a01b0316611314565b34801561076857600080fd5b506104496004803603602081101561077f57600080fd5b50356001600160a01b031661139f565b34801561079b57600080fd5b506107c2600480360360208110156107b257600080fd5b50356001600160401b031661151a565b60408051918252519081900360200190f35b3480156107e057600080fd5b50610807600480360360208110156107f757600080fd5b50356001600160401b03166115c1565b604080516001600160a01b039094168452602084019290925261ffff1682820152519081900360600190f35b34801561083f57600080fd5b506103d56115e9565b34801561085457600080fd5b506107c26115f8565b34801561086957600080fd5b506104496004803603602081101561088057600080fd5b503515156116cc565b34801561089557600080fd5b5061039d600480360360208110156108ac57600080fd5b5035611722565b3480156108bf57600080fd5b50610449611737565b3480156108d457600080fd5b50610449600480360360208110156108eb57600080fd5b50356001600160a01b03166117c0565b34801561090757600080fd5b506107c26004803603602081101561091e57600080fd5b50356001600160401b03166118c1565b34801561093a57600080fd5b506105e86118d8565b34801561094f57600080fd5b506103d56004803603602081101561096657600080fd5b50356001600160401b03166118e7565b34801561098257600080fd5b50610449600480360361026081101561099a57600080fd5b506001600160401b03813516906001600160a01b0360208201351690604081019060a081019061014081019061018081019061020081019061024001356118f8565b3480156109e857600080fd5b50610449600480360360208110156109ff57600080fd5b50356001600160a01b0316611a51565b348015610a1b57600080fd5b5061055e60048036036040811015610a3257600080fd5b50803590602001356001600160a01b0316611bd1565b348015610a5457600080fd5b50610449611c06565b348015610a6957600080fd5b5061044960048036036020811015610a8057600080fd5b50356001600160a01b0316611c8d565b348015610a9c57600080fd5b5061044960048036036020811015610ab357600080fd5b50356001600160a01b0316611d8b565b348015610acf57600080fd5b5061039d611e89565b348015610ae457600080fd5b50610b0b60048036036020811015610afb57600080fd5b50356001600160401b0316611eb5565b6040516001600160a01b03881681526020810187606080838360005b83811015610b3f578181015183820152602001610b27565b5050505090500186600560200280838360005b83811015610b6a578181015183820152602001610b52565b5050505090500185600260200280838360005b83811015610b95578181015183820152602001610b7d565b5050505090500184600460200280838360005b83811015610bc0578181015183820152602001610ba8565b5050505090500183600260200280838360005b83811015610beb578181015183820152602001610bd3565b5050505090500182815260200197505050505050505060405180910390f35b348015610c1657600080fd5b5061044960048036036020811015610c2d57600080fd5b50356001600160401b0316611f0e565b348015610c4957600080fd5b50610c7060048036036020811015610c6057600080fd5b50356001600160401b0316611f94565b604080516001600160401b0394851681529290931660208301528183015290519081900360600190f35b348015610ca657600080fd5b506103d5611fc8565b600080610cdb7f8af7b7118de65da3b974a3fd4b0c702b66442f74b9dff6eaed1037254c0b79fe611fd2565b915091509091565b6000610ced612006565b90505b90565b600080610cdb7f7cbb12e82a6d63ff16fe43977f43e3e2b247ecd4e62c0e340da8800a48c67346611fd2565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314610d9b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160e01b031982166000818152600b602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582519384529083015280517f963ffecd07ecedcf6058ec0ca1bc68d292acd47448528e50af48ea5167c8a6fb9281900390910190a15050565b6000546001600160401b031690565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314610e995760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601e81527f4354525f494e56414c49445f494d504c535f494e5055545f4c454e47544800006020820152838214610f1c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060005b83811015610f6757610f5f858583818110610f3757fe5b90506020020135848484818110610f4a57fe5b905060200201356001600160a01b031661202c565b600101610f20565b5050505050565b6001600160a01b03811660009081526005602052604090205460ff165b919050565b6001600160a01b03166000908152600a602052604090208054600190910154909160ff90911690565b600080610cdb7f06aa03964db1f7257357ef09714a5f0ca3633723df419e97015e0c7a3e83edb7611fd2565b6006546001600160a01b031690565b600080610cdb7ffa275b1417437a2a2ea8e91e9fe73c28eaf0a28532a250541da5ac0d1892b418611fd2565b6000610ced612130565b6008546001600160a01b031690565b6000610ced6121fe565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146110bf5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5080158015906110ce57508215155b6040518060400160405280601e81526020017f4354525f494e56414c49445f494d504c535f494e5055545f4c454e4754480000815250906111505760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051828152602080840282010190915260609082801561117d578160200160208202803883390190505b50905060005b828110156112095760006009600086868581811061119d57fe5b602090810292909201358352508181019290925260409081016000908120546001600160a01b0316808252600a909352209091506111da81612270565b818484815181106111e757fe5b6001600160a01b03909216602092830291909101909101525050600101611183565b5060005b8481101561130c5785858281811061122157fe5b905060200201356001600160a01b03166001600160a01b0316634e112d368585856040518463ffffffff1660e01b815260040180806020018060200183810383528686828181526020019250602002808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b838110156112c05781810151838201526020016112a8565b5050505090500195505050505050600060405180830381600087803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b50506001909201915061120d9050565b505050505050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146113905760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5061139b828261202c565b5050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b0316331461141b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160a01b0381166000908152600a6020526040902061143d81612270565b600181015460408051808201909152601a81527f4354525f4d4f44554c455f414c52454144595f454e41424c454400000000000060208201529060ff166114c55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060018101805460ff191690558054604080519182526001600160a01b038416602083015280517f76a633d819bc10acca13779c3321738b6d0b0688ba75a006a8ef807dd087f4c09281900390910190a15050565b6000805460408051808201909152601781527610d312d7d511549357d113d154d7d393d517d1561254d5604a1b602082015283916001600160401b03600160401b909104811690831611156115b05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506115ba836122e7565b9392505050565b6000806000806115cf6123bb565b90506115db85826123d1565b935093509350509193909250565b6002546001600160401b031690565b60008054600160401b90046001600160401b0316808252600160208190526040832090810154801561162e579250610cf0915050565b6000611639846122e7565b60408051808201909152601f81527f434c4b5f5445524d5f52414e444f4d4e4553535f554e415641494c41424c45006020820152909150816116bc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060019092018290555091505090565b33600081815260056020908152604091829020805460ff1916851515908117909155825190815291517f189949428c2e58715ea2f0be0d702bc14e73743bdbb58814a595c19e1285c5be9281900390910190a250565b60008061172e83611fd2565b91509150915091565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146117b35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506117be6000612411565b565b6006546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b0316331461183c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b0382166118b45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be8161247b565b50565b6000806118cc6123bb565b90506115ba83826124e5565b6007546001600160a01b031690565b60006118f2826124fe565b92915050565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b031633146119745760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600061197f612130565b9050611a46818a8a8a6003806020026040519081016040528092919082600360200280828437600092019190915250506040805160a081810190925291508c9060059083908390808284376000920191909152505060408051808201825291508c9060029083908390808284376000920191909152505060408051608081810190925291508c9060049083908390808284376000920191909152505060408051808201825291508c9060029083908390808284376000920191909152508c91506126f99050565b505050505050505050565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611acd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160a01b0381166000908152600a60205260409020611aef81612270565b600181015460408051808201909152601b81527f4354525f4d4f44554c455f414c52454144595f44495341424c4544000000000060208201529060ff1615611b785760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001818101805460ff191690911790558054604080519182526001600160a01b038416602083015280517fe740336c1666075fb80157eb9fed64f7c246823957f469eb4db34be01449bfc99281900390910190a15050565b6001600160a01b0381166000908152600a60205260408120805484148015611bfe5750600181015460ff16155b949350505050565b6006546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611c825760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506117be600061247b565b6008546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611d095760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b038216611d815760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be81612411565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611e075760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408051808201909152601c8152600080516020613b2183398151915260208201526001600160a01b038216611e7f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be81613182565b600080610cdb7f14a6c70f0f6d449c014c7bbc9e68e31e79e8474fb03b7194df83109a2d888ae6611fd2565b6000611ebf6139b0565b611ec76139ce565b611ecf6139ec565b611ed7613a0a565b611edf6139ec565b600080611eea6123bb565b9050611ef689826131ec565b959f949e50929c50909a509850965090945092505050565b6007546040805180820190915260178152600080516020613b418339815191526020820152906001600160a01b03163314611f8a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506118be816134a2565b6001600160401b039081166000908152600160208190526040909120805491015481831693600160401b9092049092169190565b6000610ced6123bb565b6000908152600960209081526040808320546001600160a01b0316808452600a90925290912060010154909160ff90911690565b6000610ced6120136121fe565b600054600160401b90046001600160401b031690613668565b612035816136fc565b6040518060400160405280601f81526020017f4354525f494d504c454d454e544154494f4e5f4e4f545f434f4e545241435400815250906120b75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600082815260096020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452600a83529281902085905580518581529182019290925281517f0669329f751b07de4aa82f60514a409d0dfaef266e791a4a65a95b07b1c4c324929181900390910190a15050565b60008061213b6121fe565b604080518082019091526018815277434c4b5f544f4f5f4d414e595f5452414e534954494f4e5360401b602082015290915060016001600160401b03831611156121c65760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506001600160401b0381166121ef575050600054600160401b90046001600160401b0316610cf0565b6121f8816124fe565b91505090565b600080546001600160401b03600160401b9091048116825260016020526040822054168061222a61371b565b6001600160401b03161015612243576000915050610cf0565b6000546001600160401b03168161225861371b565b036001600160401b03168161226957fe5b0491505090565b805460408051808201909152601281527110d51497d353d115531157d393d517d4d15560721b60208201529061139b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b6001600160401b038082166000908152600160205260408120805491929091600160401b90041661231661372d565b6001600160401b0316116040518060400160405280601b81526020017f434c4b5f5445524d5f52414e444f4d4e4553535f4e4f545f5945540000000000815250906123a25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5054600160401b90046001600160401b03164092915050565b600054600160401b90046001600160401b031690565b6000806000806123e1868661373a565b805460028201546005909201546001600160a01b0390911698919750600160401b900461ffff1695509350505050565b600854604080516001600160a01b039283168152918316602083015280517faf8bba87fb343f5755495c80323f32cd6bbfaebd666ff5abac709bc1f76f2f179281900390910190a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b600654604080516001600160a01b039283168152918316602083015280517f2e8176039aca48fb2df80d8a3f0c25cf4f12ba7ba15aabe562bd39f71967954f9281900390910190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806124f2848461373a565b600a0154949350505050565b6000806125096121fe565b90506000816001600160401b0316846001600160401b03161061252c578161252e565b835b6001600160401b03169050600081116040518060400160405280601c81526020017f434c4b5f494e56414c49445f5452414e534954494f4e5f5445524d5300000000815250906125bf5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060006125ca61372d565b600054909150600160401b90046001600160401b03168060015b848111612684576001600160401b038083166000908152600160208190526040808320959091019283168252902090929061261e8461376d565b600054825461263f916001600160401b03918216911663ffffffff61366816565b815467ffffffffffffffff19166001600160401b039182161767ffffffffffffffff60401b1916600160401b60018981019390931602179091559190910190506125e4565b50600080546001600160401b03808416600160401b810267ffffffffffffffff60401b1990931692909217909255604080519285168352602083019190915280517fb8818b6d0c27e4fc7cf75de16ac2543426d3c0bcc520931d24e5a7dde4adca119281900390910190a19695505050505050565b6001600160401b03891615806127205750886001600160401b0316886001600160401b0316115b60405180604001604052806011815260200170434f4e465f544f4f5f4f4c445f5445524d60781b815250906127965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b508151158015906127aa5750602082015115155b6040518060400160405280601b81526020017f434f4e465f5a45524f5f434f4c4c41544552414c5f464143544f5200000000008152509061282c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5061283e8460005b6020020151613776565b6040518060400160405280601881526020017710d3d39197d253959053125117d411539053151657d410d560421b815250906128bb5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506128c7846001612834565b6040518060400160405280602081526020017f434f4e465f494e56414c49445f46494e414c5f524f554e445f5245445f504354815250906129495760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506000838160200201516001600160401b031611604051806060016040528060218152602001613adf60219139906129c25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600083600160200201516001600160401b0316116040518060400160405280601b81526020017f434f4e465f4241445f41505045414c5f535445505f464143544f52000000000081525090612a595760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060408301516001600160401b031660008115801590612a7a5750600a8211155b9050806040518060400160405280601e81526020017f434f4e465f494e56414c49445f4d41585f41505045414c5f524f554e4453000081525090612aff5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5060005b6005811015612bda576000888260058110612b1a57fe5b60200201516001600160401b0316118015612b4f57506121de888260058110612b3f57fe5b60200201516001600160401b0316105b6040518060400160405280601f81526020017f434f4e465f4c415247455f524f554e445f50484153455f4455524154494f4e0081525090612bd15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600101612b03565b5060408051808201909152601c81527f434f4e465f5a45524f5f4d494e5f4143544956455f42414c414e434500000000602082015283612c5b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506002546001600160401b03808d1691161115612c92576002546001600160401b0316600090815260046020526040812055612ca6565b6003805490612ca49060018301613a28565b505b600380546000198101916000916001600160401b038416908110612cc657fe5b90600052602060002090600b020190506040518060a001604052808c6001600160a01b0316815260200189600160028110612cfd57fe5b602002015161ffff1681526020018b600060038110612d1857fe5b602002015181526020018b600160038110612d2f57fe5b602002015181526020018b600260038110612d4657fe5b60209081029190910151909152815183549183015161ffff16600160a01b0261ffff60a01b196001600160a01b039092166001600160a01b03199093169290921716178255604080820151600184015560608201516002840155608090910151600383015580516101808101909152808a600060200201516001600160401b031681526020018a600160058110612dd957fe5b60200201516001600160401b031681526020018a600260058110612df957fe5b60200201516001600160401b031681526020018a600360058110612e1957fe5b60200201516001600160401b031681526020018a600460058110612e3957fe5b60200201516001600160401b0316815260200189600060028110612e5957fe5b602002015161ffff16815260200188600060048110612e7457fe5b60200201516001600160401b0316815260200188600160048110612e9457fe5b60200201516001600160401b0316815260200188600360048110612eb457fe5b60200201516001600160401b0316815260200185815260200187600060028110612eda57fe5b6020020151815260200187600160028110612ef157fe5b60200201518152508160040160008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160000160106101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160010160086101000a81548161ffff021916908361ffff16021790555060c082015181600101600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160010160126101000a8154816001600160401b0302191690836001600160401b031602179055506101008201518160020160006101000a8154816001600160401b0302191690836001600160401b031602179055506101208201518160030155610140820151816004015561016082015181600501559050508481600a0181905550816001600160401b0316600460008e6001600160401b03166001600160401b03168152602001908152602001600020819055508b600260006101000a8154816001600160401b0302191690836001600160401b031602179055507ff991c74e88b00b8de409caf790045f133e9a8283d3b989db88e2b2d93612c3a78c8360405180836001600160401b03166001600160401b03168152602001826001600160401b03166001600160401b031681526020019250505060405180910390a150505050505050505050505050565b600754604080516001600160a01b039283168152918316602083015280517fad1fe49159fc13ce805cb23e72eb6724c008509c8095b9499752efea5747af3e9281900390910190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006131f66139b0565b6131fe6139ce565b6132066139ec565b61320e613a0a565b6132166139ec565b6000806132238a8a61373a565b905060008160000190508060000160009054906101000a90046001600160a01b03169850604051806060016040528082600101548152602001826002015481526020018260030154815250975060008260040190506040518060a001604052808260000160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160089054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160109054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260000160189054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260010160009054906101000a90046001600160401b03166001600160401b03166001600160401b0316815250975060405180604001604052808260010160089054906101000a900461ffff1661ffff1661ffff1681526020018360000160149054906101000a900461ffff1661ffff1661ffff168152509650604051806080016040528082600101600a9054906101000a90046001600160401b03166001600160401b03166001600160401b031681526020018260010160129054906101000a90046001600160401b03166001600160401b03166001600160401b0316815260200182600301546001600160401b03166001600160401b031681526020018260020160009054906101000a90046001600160401b03166001600160401b03166001600160401b031681525095506040518060400160405280826004015481526020018260050154815250945082600a0154935050505092959891949750929550565b6134aa612006565b6001600160401b0316600014604051806060016040528060218152602001613b00602191399061351b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b506000808052600160205280547fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49805490929161356a916001600160401b03908116911663ffffffff61366816565b9050806001600160401b0316836001600160401b0316116040518060400160405280602081526020017f434c4b5f43414e4e4f545f44454c41595f504153545f53544152545f54494d45815250906136035760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b50600054825467ffffffffffffffff19166001600160401b0391821685038216178355604080518383168152918516602083015280517f9b735da8a0762c6e913df06587b4fa81f87b8075e2a2afdeae6afde9456fd8799281900390910190a1505050565b6040805180820190915260138152724d41544836345f4144445f4f564552464c4f5760681b6020820152600090838301906001600160401b0380861690831610156136f45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b509392505050565b60006001600160a01b03821661371457506000610f8b565b503b151590565b6000610ced613728613785565b613789565b6000610ced613728613815565b6000806137478484613819565b90506003818154811061375657fe5b90600052602060002090600b020191505092915050565b6118be816138a8565b61271061ffff82161115919050565b4290565b60408051808201909152601581527455494e5436345f4e554d4245525f544f4f5f42494760581b60208201526000906001600160401b0383111561380e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5090919050565b4390565b6000816001600160401b0316836001600160401b03161161385357506001600160401b0382166000908152600460205260409020546118f2565b6002546001600160401b039081169084168111613889576001600160401b031660009081526004602052604090205490506118f2565b50506001600160401b0316600090815260046020526040902054919050565b6001600160401b0381166000908152600460205260409020548061139b5760006004816138e56001600160401b038616600163ffffffff61391816565b6001600160401b039081168252602080830193909352604091820160009081205491871681526004909352912055505050565b6000826001600160401b0316826001600160401b03161115604051806040016040528060148152602001734d41544836345f5355425f554e444552464c4f5760601b815250906139a95760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156102c95781810151838201526020016102b1565b5050900390565b60405180606001604052806003906020820280388339509192915050565b6040518060a001604052806005906020820280388339509192915050565b60405180604001604052806002906020820280388339509192915050565b60405180608001604052806004906020820280388339509192915050565b815481835581811115613a5457600b0281600b028360005260206000209182019101613a549190613a59565b505050565b610cf091905b80821115613ada5780546001600160b01b03191681556000600182018190556002820181905560038201819055600482018190556005820180546001600160d01b031916905560068201805467ffffffffffffffff19169055600782018190556008820181905560098201819055600a820155600b01613a5f565b509056fe434f4e465f4241445f494e495449414c5f475541524449414e535f4e554d424552434c4b5f43414e4e4f545f44454c41595f535441525445445f50524f544f434f4c4354525f494e56414c49445f474f5645524e4f525f41444452455353000000004354525f53454e4445525f4e4f545f474f5645524e4f52000000000000000000a265627a7a72315820c97e42b1b77e4b0d14b9cf961d4575007a986a65e666759e97f7d5054831bc8d64736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
