{
  "_format": "hh-sol-artifact-1",
  "contractName": "BossHandlerHelper",
  "sourceName": "contracts/V3/handler/BossHandlerHelper.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REVOKE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            }
          ],
          "internalType": "struct IBossHandlerHelper.RandomParams",
          "name": "randomParams",
          "type": "tuple"
        }
      ],
      "name": "getBattleResult",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cmd",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "clusterRuleHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            }
          ],
          "internalType": "struct IBossHandlerHelper.RandomParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_randomGenerator",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "npToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "heroToken",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "callerSC",
          "type": "uint256"
        }
      ],
      "name": "inputHeros",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            }
          ],
          "internalType": "struct IBossHandlerHelper.RandomParams",
          "name": "randomParams",
          "type": "tuple"
        }
      ],
      "name": "makeBattleSeed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "atkId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "defId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "np",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scWin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scNormal",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scLoss",
          "type": "uint256"
        }
      ],
      "name": "regAttribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "level",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "atk",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "def",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "cd",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "np",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "reward",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "battleTime",
              "type": "uint32"
            }
          ],
          "internalType": "struct IBossHandlerHelper.Boss",
          "name": "boss",
          "type": "tuple"
        }
      ],
      "name": "updateBoss",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50615116806100206000396000f3fe608060405234801561001057600080fd5b50600436106101015760003560e01c80638ad0495a1161009d5780638ad0495a1461020a5780638b38b514146102345780639010d07c1461024957806391d1485414610274578063a217fddf14610287578063a8ed9ef91461028f578063b480199c146102a2578063c4d66de8146102b5578063ca15c873146102c8578063d547741f146102db57600080fd5b806301ffc9a7146101065780631b6ef17a1461012e578063248a9ca31461014e5780632f2ff15d1461018057806334c76b251461019557806336568abe146101ca57806354fd4d50146101dd578063716d7b40146101e4578063757db4d8146101f7575b600080fd5b610119610114366004614481565b6102ee565b60405190151581526020015b60405180910390f35b61014161013c366004614643565b610319565b604051610125919061474d565b61017261015c3660046147af565b6000908152600160208190526040909120015490565b604051908152602001610125565b61019361018e3660046147c8565b6115ab565b005b60408051808201825260138152722127a9a9afa420a7222622a92fa422a62822a960691b6020820152905161012591906147f8565b6101936101d83660046147c8565b6115d6565b6000610172565b6101196101f236600461480b565b611659565b610193610205366004614839565b6117b3565b61021d61021836600461480b565b61197d565b604080519215158352602083019190915201610125565b61017260008051602061507483398151915281565b61025c6102573660046148e8565b6119fa565b6040516001600160a01b039091168152602001610125565b6101196102823660046147c8565b611a19565b610172600081565b61019361029d36600461490a565b611a44565b6101936102b0366004614956565b611b00565b6101936102c3366004614a47565b611ccf565b6101726102d63660046147af565b611d62565b6101936102e93660046147c8565b611d79565b60006001600160e01b03198216635a05180f60e01b1480610313575061031382611d9f565b92915050565b606080600019860161058c5760006103318582611dd4565b60008781526004602090815260408083208484528252918290208251600680825260e0820190945293945092919082015b606081526020019060019003908161036257505060408051808201909152600381526261746b60e81b602082015282549194506103a49163ffffffff16611e39565b836000815181106103b7576103b7614a64565b6020026020010181905250610401604051806040016040528060038152602001623232b360e91b8152508260000160049054906101000a900463ffffffff1663ffffffff16611e39565b8360018151811061041457610414614a64565b602002602001018190525061045d6040518060400160405280600281526020016118d960f21b8152508260000160089054906101000a900463ffffffff1663ffffffff16611e39565b8360028151811061047057610470614a64565b60200260200101819052506104b96040518060400160405280600281526020016106e760f41b81525082600001600c9054906101000a900463ffffffff1663ffffffff16611e39565b836003815181106104cc576104cc614a64565b6020026020010181905250610503604051806040016040528060068152602001651c995dd85c9960d21b8152508260010154611e39565b8360048151811061051657610516614a64565b60200260200101819052506105676040518060400160405280600a815260200169626174746c6554696d6560b01b8152508260020160009054906101000a900463ffffffff1663ffffffff16611e39565b8360058151811061057a5761057a614a64565b602002602001018190525050506115a2565b6001198601610dc25760006105a18582611f4f565b60008781526005602090815260408083206001600160a01b03851680855292529182902060c088019190915281516007808252610100820190935292935091606091816020015b60608152602001906001900390816105e8575050825490945063ffffffff166000819003610614575060015b600183015460009015610645578360010160008154811061063757610637614a64565b906000526020600020015490505b6001840154600211610710576001848101546106619190614a90565b6001600160401b03811115610678576106786144ab565b6040519080825280602002602001820160405280156106a1578160200160208202803683370190505b50925060015b600185015481101561070e578460010181815481106106c8576106c8614a64565b9060005260206000200154846001836106e19190614a90565b815181106106f1576106f1614a64565b60209081029190910101528061070681614aa3565b9150506106a7565b505b61073f6040518060400160405280600d81526020016c1b995e1d109bdcdcd3195d995b609a1b81525083611e39565b8660008151811061075257610752614a64565b60200260200101819052506107a56040518060400160405280600c81526020016b756e46726f7a656e54696d6560a01b8152508560000160049054906101000a900463ffffffff1663ffffffff16611e39565b866001815181106107b8576107b8614a64565b60200260200101819052506107ec604051806040016040528060078152602001666865726f49647360c81b81525084611f9a565b866002815181106107ff576107ff614a64565b6020026020010181905250610830604051806040016040528060048152602001631b9c125960e21b81525082611e39565b8660038151811061084357610843614a64565b602002602001018190525061089f6040518060400160405280600681526020016575736572534360d01b81525061271086600201541015610888578560020154611e39565b612710866002015461089a9190614a90565b611e39565b866004815181106108b2576108b2614a64565b60200260200101819052505050600081516000036108d257506001610cc0565b60016004840154600160c01b900460ff1660028111156108f4576108f4614abc565b0361090157506002610cc0565b60026004840154600160c01b900460ff16600281111561092357610923614abc565b03610cc057600354875160208901516040808b015160608c015160808d015160a08e015193516360653c6360e11b81523060048201526001600160a01b03968716602482015263ffffffff958616604482015261ffff9384166064820152929091166084830152841660a4820152911660c482015286821660e4820152600092919091169063c0ca78c690610104016101e060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190614b04565b9050610a396040518060400160405280601f81526020017f72616e646f6d20737461746520706172616d732e636c7573746572417265610081525089600001516120dc565b610a826040518060400160405280601d81526020017f72616e646f6d20737461746520706172616d732e636c75737465724964000000815250896020015163ffffffff16612121565b610aac60405180606001604052806026815260200161509460269139896040015161ffff16612121565b610ad66040518060600160405280602781526020016150ba60279139896060015161ffff16612121565b610b10604051806040016040528060148152602001733930b73237b69039ba30ba329031b7bab73a32b960611b81525089608001516120dc565b610b4f604051806040016040528060138152602001721c985b991bdb481cdd185d19481d185cdad259606a1b8152508960a0015163ffffffff16612121565b610b88604051806040016040528060138152602001723930b73237b69039ba30ba329031b0b63632b960691b8152508960c001516120dc565b610bd26040518060400160405280601e81526020017f72616e646f6d20737461746520667574757265426c6f636b4e756d626572000081525082610180015163ffffffff16612121565b610c0d604051806040016040528060198152602001783930b73237b69039ba30ba3290313637b1b590373ab6b132b960391b81525043612121565b610c516040518060400160405280601f81526020017f72616e646f6d20737461746520667574757265426c6f636b48617368496e7400815250826101c00151612121565b4381610180015163ffffffff161115610c6d5760039150610cbe565b600081610180015163ffffffff16118015610c8b57506101c0810151155b15610c995760069150610cbe565b6000610ca58b8a612166565b5090508015610cb75760049250610cbc565b600592505b505b505b610ce760405180604001604052806005815260200164737461746560d81b81525082611e39565b85600581518110610cfa57610cfa614a64565b602002602001018190525060008251600014610d6d5760008a8152600460208181526040808420885463ffffffff9081168652925283206002015491870154610d4e92821691600160a01b90910416614c1a565b63ffffffff16905042811115610d6b57610d684282614a90565b91505b505b610d9a6040518060400160405280600b81526020016a3232b630bca932b6b0b4b760a91b81525082611e39565b86600681518110610dad57610dad614a64565b602002602001018190525050505050506115a2565b60021986016110a257604080516007808252610100820190925290816020015b6060815260200190600190039081610de257505060008681526006602090815260409182902082518084019093526005835264185d1ad25960da1b91830191909152805492935091610e3a919063ffffffff16611e39565b82600081518110610e4d57610e4d614a64565b6020026020010181905250610e9960405180604001604052806005815260200164191959925960da1b8152508260000160049054906101000a900463ffffffff1663ffffffff16611e39565b82600181518110610eac57610eac614a64565b6020026020010181905250610ef7604051806040016040528060048152602001631b9c125960e21b8152508260000160089054906101000a900463ffffffff1663ffffffff16611e39565b82600281518110610f0a57610f0a614a64565b6020026020010181905250610f566040518060400160405280600581526020016439b1abb4b760d91b81525082600001600c9054906101000a900463ffffffff1663ffffffff16611e39565b82600381518110610f6957610f69614a64565b6020026020010181905250610fb8604051806040016040528060088152602001671cd8d39bdc9b585b60c21b8152508260000160109054906101000a900463ffffffff1663ffffffff16611e39565b82600481518110610fcb57610fcb614a64565b60200260200101819052506110186040518060400160405280600681526020016573634c6f737360d01b8152508260000160149054906101000a900463ffffffff1663ffffffff16611e39565b8260058151811061102b5761102b614a64565b602002602001018190525061107e6040518060400160405280600c81526020016b189bdcdcd3585e13195d995b60a21b8152508260000160189054906101000a900463ffffffff1663ffffffff16611e39565b8260068151811061109157611091614a64565b6020026020010181905250506115a2565b60031986016115a25760006110b88660066125e3565b63ffffffff1690506000816001600160401b038111156110da576110da6144ab565b604051908082528060200260200182016040528015611103578160200160208202803683370190505b5090506000826001600160401b03811115611120576111206144ab565b604051908082528060200260200182016040528015611149578160200160208202803683370190505b5090506000836001600160401b03811115611166576111666144ab565b60405190808252806020026020018201604052801561118f578160200160208202803683370190505b5090506000846001600160401b038111156111ac576111ac6144ab565b6040519080825280602002602001820160405280156111d5578160200160208202803683370190505b5090506000856001600160401b038111156111f2576111f26144ab565b60405190808252806020026020018201604052801561121b578160200160208202803683370190505b5090506000866001600160401b03811115611238576112386144ab565b604051908082528060200260200182016040528015611261578160200160208202803683370190505b5060408051600680825260e08201909252919250816020015b606081526020019060019003908161127a57905050975060015b8781116113f95760008d81526004602090815260408083208484529091529020805463ffffffff16886112c8600185614a90565b815181106112d8576112d8614a64565b60209081029190910101528054600160201b900463ffffffff16876112fe600185614a90565b8151811061130e5761130e614a64565b60209081029190910101528054600160401b900463ffffffff1686611334600185614a90565b8151811061134457611344614a64565b60209081029190910101528054600160601b900463ffffffff168561136a600185614a90565b8151811061137a5761137a614a64565b6020026020010181815250508060010154846001846113999190614a90565b815181106113a9576113a9614a64565b6020908102919091010152600281015463ffffffff16836113cb600185614a90565b815181106113db576113db614a64565b602090810291909101015250806113f181614aa3565b915050611294565b506114206040518060400160405280600481526020016361746b7360e01b81525087611f9a565b8860008151811061143357611433614a64565b6020026020010181905250611464604051806040016040528060048152602001636465667360e01b81525086611f9a565b8860018151811061147757611477614a64565b60200260200101819052506114a76040518060400160405280600381526020016263647360e81b81525085611f9a565b886002815181106114ba576114ba614a64565b60200260200101819052506114ea604051806040016040528060038152602001626e707360e81b81525084611f9a565b886003815181106114fd576114fd614a64565b6020026020010181905250611531604051806040016040528060078152602001667265776172647360c81b81525083611f9a565b8860048151811061154457611544614a64565b602002602001018190525061157c6040518060400160405280600b81526020016a626174746c6554696d657360a81b81525082611f9a565b8860058151811061158f5761158f614a64565b6020026020010181905250505050505050505b95945050505050565b600082815260016020819052604090912001546115c78161272d565b6115d1838361273a565b505050565b6001600160a01b038116331461164b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611655828261275c565b5050565b60006000805160206150748339815191526116738161272d565b600084815260056020908152604080832060c08701516001600160a01b03168452909152902060016004820154600160c01b900460ff1660028111156116bb576116bb614abc565b146116ff5760405162461bcd60e51b815260206004820152601460248201527318d85b1b195c881a185cc81b9bdd081a5b9c1d5d60621b6044820152606401611642565b6004818101805460ff60c01b1916600160c11b1790819055600087815260209283526040808220855463ffffffff908116845294529020600201548216914291611752918491600160a01b900416614c1a565b63ffffffff16111561179e5760405162461bcd60e51b81526020600482015260156024820152740c8cad8c2f240e8d2daca40dcdee840cadcdeeaced605b1b6044820152606401611642565b6117a78561277e565b935050505b5092915050565b6000805160206150748339815191526117cb8161272d565b6000848152600460209081526040808320868452825280832085518154878501518885015160608a015163ffffffff94851667ffffffffffffffff1990941693909317600160201b928516929092029190911767ffffffffffffffff60401b1916600160401b9184169190910263ffffffff60601b191617600160601b918316919091021782556080870151600183015560a08701516002909201805463ffffffff191692821692909217909155878452600690925290912080549091600160c01b90910416841115611976576118c46040518060400160405280600a8152602001691d1a1a5cc81b195d995b60b21b81525085612121565b6040805180820190915260098152681b585e081b195d995b60ba1b602082015281546118fd9190600160c01b900463ffffffff16612121565b805461191790600160c01b900463ffffffff166001614c1a565b63ffffffff1684146119595760405162461bcd60e51b815260206004820152600b60248201526a3632bb32b61032b93937b960a91b6044820152606401611642565b805463ffffffff60c01b1916600160c01b63ffffffff8616021781555b5050505050565b6000806000805160206150748339815191526119988161272d565b6000806119a58787612166565b600089815260056020908152604080832060c08c0180516001600160a01b03168552925290912090518154939550919350916119ea918a91869063ffffffff1661284a565b509194509250505b509250929050565b6000828152600260205260408120611a12908361293f565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020615074833981519152611a5c8161272d565b50600096875260066020526040909620805463ffffffff978816600160a01b0263ffffffff60a01b19938916600160801b029390931667ffffffffffffffff60801b19948916600160601b0263ffffffff60601b19968a16600160401b029690961667ffffffffffffffff60401b19978a16600160201b0267ffffffffffffffff199093169990981698909817179490941694909417919091171692909217179055565b600080516020615074833981519152611b188161272d565b6000805b8451811015611b6657848181518110611b3757611b37614a64565b6020026020010151600014611b545781611b5081614aa3565b9250505b80611b5e81614aa3565b915050611b1c565b506000816001600160401b03811115611b8157611b816144ab565b604051908082528060200260200182016040528015611baa578160200160208202803683370190505b5090506000915060005b8551811015611c3557858181518110611bcf57611bcf614a64565b6020026020010151600014611c2357858181518110611bf057611bf0614a64565b6020026020010151828480611c0490614aa3565b955081518110611c1657611c16614a64565b6020026020010181815250505b80611c2d81614aa3565b915050611bb4565b5060008981526005602090815260408083206001600160a01b038c8116855292529091206003810180546001600160a01b0319168a8416179055600481018054600283018890559289166001600160c01b031990931692909217600160a01b4263ffffffff160217808355909160019160ff60c01b1916600160c01b830217905550611cc38a8a848861294b565b50505050505050505050565b6000611cdb6001612bab565b90508015611cf3576000805461ff0019166101001790555b600380546001600160a01b0319166001600160a01b038416179055611d19600033612c38565b8015611655576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260026020526040812061031390612c42565b60008281526001602081905260409091200154611d958161272d565b6115d1838361275c565b60006001600160e01b03198216637965db0b60e01b148061031357506301ffc9a760e01b6001600160e01b0319831614610313565b600080611de8611de385612c4c565b612c79565b9050611e31611e12828560ff1681518110611e0557611e05614a64565b6020026020010151612c79565b600281518110611e2457611e24614a64565b6020026020010151612d8e565b949350505050565b60606000611e4684612ddb565b90506000611e5384612de6565b9050611e966040518060400160405280600e81526020016d0b4b4b4b4b4b4b481d1bd55a5b9d60921b815250611e9183611e8c90614c37565b612df9565b612e45565b60408051600380825260808201909252600091816020015b6060815260200190600190039081611eae5790505090508281600081518110611ed957611ed9614a64565b6020026020010181905250611f09604051806040016040528060048152602001631d5a5b9d60e21b815250612ddb565b81600181518110611f1c57611f1c614a64565b60200260200101819052508181600281518110611f3b57611f3b614a64565b60200260200101819052506117a781612e8a565b600080611f5e611de385612c4c565b9050611e31611f7b828560ff1681518110611e0557611e05614a64565b600281518110611f8d57611f8d614a64565b6020026020010151612f08565b60606000611fa784612ddb565b9050600083516002611fb99190614c5b565b6001600160401b03811115611fd057611fd06144ab565b60405190808252806020026020018201604052801561200357816020015b6060815260200190600190039081611fee5790505b509050818160008151811061201a5761201a614a64565b602002602001018190525061204e604051806040016040528060088152602001671d5a5b9d131a5cdd60c21b815250612ddb565b8160018151811061206157612061614a64565b602002602001018190525060005b84518110156120d25761209a85828151811061208d5761208d614a64565b6020026020010151612de6565b826120a6836002614c5b565b815181106120b6576120b6614a64565b6020026020010181905250806120cb90614aa3565b905061206f565b506115a281612e8a565b61165582826040516024016120f2929190614c6e565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612f22565b6116558282604051602401612137929190614c98565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052612f22565b600082815260056020908152604080832060c08501516001600160a01b031684529091528120600181015482919082906001600160401b038111156121ad576121ad6144ab565b6040519080825280602002602001820160405280156121d6578160200160208202803683370190505b509050600085600001516001600160a01b03166393b441dc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122419190614cba565b6001600160a01b0316636a9b94b16001606489602001518760030160009054906101000a90046001600160a01b03168860010160008154811061228657612286614a64565b906000526020600020015461229c8e60026125e3565b6040518763ffffffff1660e01b81526004016122bd96959493929190614cd7565b602060405180830381865afa1580156122da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fe9190614d18565b64ffffffffff169050808260008151811061231b5761231b614a64565b60200260200101818152505061234f60405180604001604052806006815260200165373820ba3a3960d11b81525082612121565b5060015b600183015481101561251b5785600001516001600160a01b03166393b441dc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c59190614cba565b6001600160a01b0316636a9b94b16001606489602001518760040160009054906101000a90046001600160a01b031688600101878154811061240957612409614a64565b906000526020600020015461241f8e60006125e3565b6040518763ffffffff1660e01b815260040161244096959493929190614cd7565b602060405180830381865afa15801561245d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124819190614d18565b64ffffffffff1682828151811061249a5761249a614a64565b6020026020010181815250506124ca60405180604001604052806002815260200161693d60f01b81525082612121565b6125096040518060400160405280600481526020016361746b7360e01b8152508383815181106124fc576124fc614a64565b6020026020010151612121565b8061251381614aa3565b915050612353565b50600061252786612f2b565b905061256160405180604001604052806016815260200175676574426174746c65526573756c742072616e646f6d60501b81525082612121565b8060000361257857600080945094505050506125dc565b612583600382614d51565b9050600061259c888860c0015185876002015486613012565b90506000816125ac5760006125d1565b6000898152600460209081526040808320885463ffffffff1684529091529020600101545b919650909450505050505b9250929050565b6000828152600660205260408120818084600681111561260557612605614abc565b036126185750805463ffffffff16611e31565b600184600681111561262c5761262c614abc565b0361264657508054600160201b900463ffffffff16611e31565b600284600681111561265a5761265a614abc565b0361267457508054600160401b900463ffffffff16611e31565b600384600681111561268857612688614abc565b036126a257508054600160601b900463ffffffff16611e31565b60048460068111156126b6576126b6614abc565b036126d057508054600160801b900463ffffffff16611e31565b60058460068111156126e4576126e4614abc565b036126fe57508054600160a01b900463ffffffff16611e31565b600684600681111561271257612712614abc565b03611e31575054600160c01b900463ffffffff169392505050565b61273781336131fc565b50565b6127448282613255565b60008281526002602052604090206115d190826132c0565b61276682826132d5565b60008281526002602052604090206115d1908261333c565b600354815160208301516040808501516060860151608087015160a088015160c0890151945163063738cb60e01b81526001600160a01b03978816600482015263ffffffff968716602482015261ffff9485166044820152939092166064840152851660848301529290921660a4830152821660c4820152600092919091169063063738cb9060e4016020604051808303816000875af1158015612826573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190614d65565b60008481526005602090815260408083206001600160a01b0387168452825280832087845260048352818420858552909252822061288b6001830184614403565b6004820180546003840180546001600160a01b0319169055600164ff0000000160a01b0319169055600085156128f357825463ffffffff168360006128cf83614d87565b91906101000a81548163ffffffff021916908363ffffffff16021790555050612934565b815461290c90600160401b900463ffffffff1642614c5b565b835463ffffffff91909116600160201b0267ffffffff00000000199091161783555060018101545b979650505050505050565b6000611a128383613351565b60008481526005602090815260408083206001600160a01b0387168452825291829020805483518085019094526017845276426f737348616e646c65722074696d6520667265657a6560481b9284019290925291600160201b90910463ffffffff164290811015916129dd916129c09061337b565b84546129d890600160201b900463ffffffff1661337b565b613386565b906129fb5760405162461bcd60e51b815260040161164291906147f8565b50600181015415612a425760405162461bcd60e51b8152602060048201526011602482015270616c726561647920696e20626174746c6560781b6044820152606401611642565b600283511015612a7e5760405162461bcd60e51b815260206004820152600760248201526634b2399032b93960c91b6044820152606401611642565b612aa86040518060400160405280600881526020016763616c6c6572534360c01b81525083612121565b612ab56000612710614daa565b61ffff168210158015612ad85750612ad06002612710614daa565b61ffff168211155b612b155760405162461bcd60e51b815260206004820152600e60248201526d31b0b63632b929a19032b93937b960911b6044820152606401611642565b8251612b2a9060018301906020860190614421565b506000612b388660066125e3565b825463ffffffff918216925016600003612b5b57815463ffffffff191660011782555b815463ffffffff16811015612ba35760405162461bcd60e51b815260206004820152600e60248201526d36b0bc2632bb32b61032b93937b960911b6044820152606401611642565b505050505050565b60008054610100900460ff1615612bf2578160ff166001148015612bce5750303b155b612bea5760405162461bcd60e51b815260040161164290614dc5565b506000919050565b60005460ff808416911610612c195760405162461bcd60e51b815260040161164290614dc5565b506000805460ff191660ff92909216919091179055600190565b919050565b611655828261273a565b6000610313825490565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060612c84826133b5565b612c8d57600080fd5b6000612c98836133f0565b90506000816001600160401b03811115612cb457612cb46144ab565b604051908082528060200260200182016040528015612cf957816020015b6040805180820190915260008082526020820152815260200190600190039081612cd25790505b5090506000612d0b8560200151613475565b8560200151612d1a9190614c5b565b90506000805b84811015612d8357612d31836134f6565b9150604051806040016040528083815260200184815250848281518110612d5a57612d5a614a64565b6020908102919091010152612d6f8284614c5b565b925080612d7b81614aa3565b915050612d20565b509195945050505050565b805160009015801590612da357508151602110155b612dac57600080fd5b600080612db88461359a565b815191935091506020821015611e315760208290036101000a9004949350505050565b6060610313826135e1565b6060610313612df483613631565b6135e1565b6060612e048261376b565b612e11608084901b61376b565b60405161060f60f31b6020820152602281019290925260428201526062016040516020818303038152906040529050919050565b6116558282604051602401612e5b929190614e13565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052612f22565b6060612eb96040518060400160405280600c81526020016b656e636f64654c697374203160a01b815250613915565b6000612ec483613958565b9050612ef36040518060400160405280600c81526020016b32b731b7b232a634b9ba101960a11b815250613915565b611a12612f02825160c0613a88565b82613c3e565b8051600090601514612f1957600080fd5b61031382612d8e565b61273781613cbb565b600354815160208301516040808501516060860151608087015160a088015160c0890151945163452d593f60e11b81526101006004820152600261010482015261060f60f31b6101248201526001600160a01b03978816602482015263ffffffff968716604482015261ffff9485166064820152939092166084840152851660a48301529290921660c4830152821660e48201526000929190911690638a5ab27e9061014401602060405180830381865afa158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190614e38565b60006002845110156130585760405162461bcd60e51b815260206004820152600f60248201526e0d0cae4de40dcdee840cadcdeeaced608b1b6044820152606401611642565b60008681526005602090815260408083206001600160a01b038916845290915281209060015b86518110156130c05786818151811061309957613099614a64565b6020026020010151826130ac9190614c5b565b9150806130b881614aa3565b91505061307e565b506064866000815181106130d6576130d6614a64565b60200260200101516130e89190614c5b565b6130f29082614e51565b90506130ff888686613cdc565b6131099082614e51565b8254909150600090613122908a9063ffffffff16613d6c565b9050613157604051806040016040528060118152602001705f626174746c65206865726f206461746160781b81525083612121565b61318a604051806040016040528060118152602001705f626174746c6520626f7373206461746160781b81525082612121565b6131b26040518060400160405280600681526020016575736572534360d01b81525087612121565b6131da60405180604001604052806006815260200165626f7373534360d01b81525086612121565b82546131ed908a9063ffffffff16613d6c565b90911198975050505050505050565b6132068282611a19565b6116555761321381613f30565b61321e836020613f42565b60405160200161322f929190614e68565b60408051601f198184030181529082905262461bcd60e51b8252611642916004016147f8565b61325f8282611a19565b6116555760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611a12836001600160a01b0384166140dd565b6132df8282611a19565b156116555760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611a12836001600160a01b03841661412c565b600082600001828154811061336857613368614a64565b9060005260206000200154905092915050565b60606103138261421f565b606083838360405160200161339d93929190614ed7565b60405160208183030381529060405290509392505050565b805160009081036133c857506000919050565b6020820151805160001a9060c08210156133e6575060009392505050565b5060019392505050565b8051600090810361340357506000919050565b6000806134138460200151613475565b84602001516134229190614c5b565b905060008460000151856020015161343a9190614c5b565b90505b8082101561346c5761344e826134f6565b6134589083614c5b565b91508261346481614aa3565b93505061343d565b50909392505050565b8051600090811a608081101561348e5750600092915050565b60b88110806134a9575060c081108015906134a9575060f881105b156134b75750600192915050565b60c08110156134e4576134cc600160b8614f31565b6134d99060ff1682614a90565b611a12906001614c5b565b6134cc600160f8614f31565b50919050565b80516000908190811a608081101561351157600191506117ac565b60b881101561353757613525608082614a90565b613530906001614c5b565b91506117ac565b60c08110156135645760b78103600185019450806020036101000a855104600182018101935050506117ac565b60f88110156135785761352560c082614a90565b60019390930151602084900360f7016101000a900490920160f5190192915050565b60008060006135ac8460200151613475565b905060008185602001516135c09190614c5b565b905060008286600001516135d49190614a90565b9196919550909350505050565b60608082516001148015613610575060808360008151811061360557613605614a64565b016020015160f81c11155b1561361c575081610313565b611a1261362b84516080613a88565b84613c3e565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b60208110156136a25781818151811061367a5761367a614a64565b01602001516001600160f81b0319166000036136a2578061369a81614aa3565b91505061365f565b60006136af826020614a90565b6001600160401b038111156136c6576136c66144ab565b6040519080825280601f01601f1916602001820160405280156136f0576020820181803683370190505b50905060005b815181101561376257838361370a81614aa3565b94508151811061371c5761371c614a64565b602001015160f81c60f81b82828151811061373957613739614a64565b60200101906001600160f81b031916908160001a9053508061375a81614aa3565b9150506136f6565b50949350505050565b7aff00000000000000ff00000000000000ff00000000000000ff000063ffffffff60401b604083901c90811663ffffffff60c01b84161760201c63ffffffff60601b919091166001600160e01b031984161717601081901c91821678ff00000000000000ff00000000000000ff00000000000000ff60301b821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c1617906138b1827f0606060606060606060606060606060606060606060606060606060606060606614c5b565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660076138e19190614e51565b61390b827f3030303030303030303030303030303030303030303030303030303030303030614c5b565b6103139190614c5b565b6127378160405160240161392991906147f8565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612f22565b606081516000036139795760408051600080825260208201909252906117ac565b6000805b83518110156139c05783818151811061399857613998614a64565b602002602001015151826139ac9190614c5b565b9150806139b881614aa3565b91505061397d565b6000826001600160401b038111156139da576139da6144ab565b6040519080825280601f01601f191660200182016040528015613a04576020820181803683370190505b50600092509050602081015b8551831015613762576000868481518110613a2d57613a2d614a64565b602002602001015190506000602082019050613a4b838284516142b1565b878581518110613a5d57613a5d614a64565b60200260200101515183613a719190614c5b565b925050508280613a8090614aa3565b935050613a10565b6060806038841015613af25760408051600180825281830190925290602082018180368337019050509050613abd8385614c5b565b601f1a60f81b81600081518110613ad657613ad6614a64565b60200101906001600160f81b031916908160001a905350611a12565b600060015b613b018187614f4a565b15613b275781613b1081614aa3565b9250613b20905061010082614e51565b9050613af7565b613b32826001614c5b565b6001600160401b03811115613b4957613b496144ab565b6040519080825280601f01601f191660200182016040528015613b73576020820181803683370190505b509250613b808583614c5b565b613b8b906037614c5b565b601f1a60f81b83600081518110613ba457613ba4614a64565b60200101906001600160f81b031916908160001a905350600190505b818111613c3557610100613bd48284614a90565b613be09061010061503a565b613bea9088614f4a565b613bf49190614d51565b601f1a60f81b838281518110613c0c57613c0c614a64565b60200101906001600160f81b031916908160001a90535080613c2d81614aa3565b915050613bc0565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015613c6f578051835260209283019201613c57565b50855184518101855292509050808201602086015b81831015613c9c578051835260209283019201613c84565b508651929092011591909101601f01601f191660405250905092915050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6000613cea61271084614a90565b9250818303613d0b57613cfe8460046125e3565b63ffffffff169050611a12565b82158015613d195750600282145b80613d2d5750600183148015613d2d575081155b80613d435750600283148015613d435750600182145b15613d5357613cfe8460056125e3565b613d5e8460036125e3565b63ffffffff16949350505050565b60008281526004602090815260408083208484528252808320815160c081018352815463ffffffff8082168352600160201b8204811683870152600160401b8204811683860152600160601b9091048116606083015260018301546080830152600290920154821660a08201528251808401909352601083526f5f676574426f7373446174612061746b60801b938301939093528251613e0d929116612121565b613e496040518060400160405280601081526020016f2fb3b2ba2137b9b9a230ba30903232b360811b815250826020015163ffffffff16612121565b613e846040518060400160405280600f81526020016e17d9d95d109bdcdcd1185d184818d9608a1b815250826040015163ffffffff16612121565b613ebf6040518060400160405280600f81526020016e05f676574426f737344617461206e7608c1b815250826060015163ffffffff16612121565b613ef86040518060400160405280601381526020017217d9d95d109bdcdcd1185d18481c995dd85c99606a1b8152508260800151612121565b6064816060015163ffffffff166064613f119190614c5b565b826020015163ffffffff16613f269190614e51565b611e319190614e51565b60606103136001600160a01b03831660145b60606000613f51836002614e51565b613f5c906002614c5b565b6001600160401b03811115613f7357613f736144ab565b6040519080825280601f01601f191660200182016040528015613f9d576020820181803683370190505b509050600360fc1b81600081518110613fb857613fb8614a64565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fe757613fe7614a64565b60200101906001600160f81b031916908160001a905350600061400b846002614e51565b614016906001614c5b565b90505b600181111561408e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061404a5761404a614a64565b1a60f81b82828151811061406057614060614a64565b60200101906001600160f81b031916908160001a90535060049490941c9361408781615046565b9050614019565b508315611a125760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611642565b600081815260018301602052604081205461412457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610313565b506000610313565b60008181526001830160205260408120548015614215576000614150600183614a90565b855490915060009061416490600190614a90565b90508181146141c957600086600001828154811061418457614184614a64565b90600052602060002001549050808760000184815481106141a7576141a7614a64565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806141da576141da61505d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610313565b6000915050610313565b6060600061422c8361432d565b60010190506000816001600160401b0381111561424b5761424b6144ab565b6040519080825280601f01601f191660200182016040528015614275576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461427f57509392505050565b8282825b602081106142ed57815183526142cc602084614c5b565b92506142d9602083614c5b565b91506142e6602082614a90565b90506142b5565b8015612ba35760006001614302836020614a90565b61430e9061010061503a565b6143189190614a90565b83518551821691191617845250505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061436c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310614396576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106143b457662386f26fc10000830492506010015b6305f5e10083106143cc576305f5e100830492506008015b61271083106143e057612710830492506004015b606483106143f2576064830492506002015b600a83106103135760010192915050565b5080546000825590600052602060002090810190612737919061446c565b82805482825590600052602060002090810192821561445c579160200282015b8281111561445c578251825591602001919060010190614441565b5061446892915061446c565b5090565b5b80821115614468576000815560010161446d565b60006020828403121561449357600080fd5b81356001600160e01b031981168114611a1257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156144e3576144e36144ab565b60405290565b6040516101e081016001600160401b03811182821017156144e3576144e36144ab565b604051601f8201601f191681016001600160401b0381118282101715614534576145346144ab565b604052919050565b6001600160a01b038116811461273757600080fd5b8035612c338161453c565b63ffffffff8116811461273757600080fd5b8035612c338161455c565b61ffff8116811461273757600080fd5b600060e0828403121561459b57600080fd5b60405160e081018181106001600160401b03821117156145bd576145bd6144ab565b60405290508082356145ce8161453c565b815260208301356145de8161455c565b602082015260408301356145f181614579565b6040820152606083013561460481614579565b606082015261461560808401614551565b608082015261462660a0840161456e565b60a082015261463760c08401614551565b60c08201525092915050565b600080600080610140858703121561465a57600080fd5b84359350602080860135935060408601356001600160401b038082111561468057600080fd5b818801915088601f83011261469457600080fd5b8135818111156146a6576146a66144ab565b6146b8601f8201601f1916850161450c565b915080825289848285010111156146ce57600080fd5b80848401858401376000848284010152508094505050506146f28660608701614589565b905092959194509250565b60005b83811015614718578181015183820152602001614700565b50506000910152565b600081518084526147398160208601602086016146fd565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156147a257603f19888603018452614790858351614721565b94509285019290850190600101614774565b5092979650505050505050565b6000602082840312156147c157600080fd5b5035919050565b600080604083850312156147db57600080fd5b8235915060208301356147ed8161453c565b809150509250929050565b602081526000611a126020830184614721565b600080610100838503121561481f57600080fd5b823591506148308460208501614589565b90509250929050565b600080600083850361010081121561485057600080fd5b843593506020850135925060c0603f198201121561486d57600080fd5b506148766144c1565b60408501356148848161455c565b815260608501356148948161455c565b602082015260808501356148a78161455c565b604082015260a08501356148ba8161455c565b606082015260c0850135608082015260e08501356148d78161455c565b60a082015292959194509192509050565b600080604083850312156148fb57600080fd5b50508035926020909101359150565b600080600080600080600060e0888a03121561492557600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060008060008060c0878903121561496f57600080fd5b863595506020808801356149828161453c565b955060408801356149928161453c565b945060608801356149a28161453c565b935060808801356001600160401b03808211156149be57600080fd5b818a0191508a601f8301126149d257600080fd5b8135818111156149e4576149e46144ab565b8060051b91506149f584830161450c565b818152918301840191848101908d841115614a0f57600080fd5b938501935b83851015614a2d57843582529385019390850190614a14565b80975050505050505060a087013590509295509295509295565b600060208284031215614a5957600080fd5b8135611a128161453c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561031357610313614a7a565b600060018201614ab557614ab5614a7a565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8051612c338161453c565b8051612c338161455c565b8051612c3381614579565b805160ff81168114612c3357600080fd5b60006101e08284031215614b1757600080fd5b614b1f6144e9565b614b2883614ad2565b8152614b3660208401614ad2565b6020820152614b4760408401614ad2565b6040820152614b5860608401614ad2565b6060820152614b6960808401614add565b6080820152614b7a60a08401614ae8565b60a0820152614b8b60c08401614ae8565b60c0820152614b9c60e08401614add565b60e0820152610100614baf818501614add565b90820152610120614bc1848201614add565b90820152610140614bd3848201614af3565b90820152610160614be5848201614af3565b90820152610180614bf7848201614add565b908201526101a083810151908201526101c0928301519281019290925250919050565b63ffffffff8181168382160190808211156117ac576117ac614a7a565b805160208083015191908110156134f05760001960209190910360031b1b16919050565b8082018082111561031357610313614a7a565b604081526000614c816040830185614721565b905060018060a01b03831660208301529392505050565b604081526000614cab6040830185614721565b90508260208301529392505050565b600060208284031215614ccc57600080fd5b8151611a128161453c565b60ff968716815294909516602085015263ffffffff92831660408501526001600160a01b03919091166060840152608083015290911660a082015260c00190565b600060208284031215614d2a57600080fd5b81518060040b8114611a1257600080fd5b634e487b7160e01b600052601260045260246000fd5b600082614d6057614d60614d3b565b500690565b600060208284031215614d7757600080fd5b81518015158114611a1257600080fd5b600063ffffffff808316818103614da057614da0614a7a565b6001019392505050565b61ffff8181168382160190808211156117ac576117ac614a7a565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b604081526000614e266040830185614721565b82810360208401526115a28185614721565b600060208284031215614e4a57600080fd5b5051919050565b808202811582820484141761031357610313614a7a565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614e9a8160178501602088016146fd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614ecb8160288401602088016146fd565b01602801949350505050565b60008451614ee98184602089016146fd565b8083019050600b60fa1b8082528551614f09816001850160208a016146fd565b60019201918201528351614f248160028401602088016146fd565b0160020195945050505050565b60ff828116828216039081111561031357610313614a7a565b600082614f5957614f59614d3b565b500490565b600181815b808511156119f2578160001904821115614f7f57614f7f614a7a565b80851615614f8c57918102915b93841c9390800290614f63565b600082614fa857506001610313565b81614fb557506000610313565b8160018114614fcb5760028114614fd557614ff1565b6001915050610313565b60ff841115614fe657614fe6614a7a565b50506001821b610313565b5060208310610133831016604e8410600b8410161715615014575081810a610313565b61501e8383614f5e565b806000190482111561503257615032614a7a565b029392505050565b6000611a128383614f99565b60008161505557615055614a7a565b506000190190565b634e487b7160e01b600052603160045260246000fdfe5297e68f3a27f04914f2c6db0ad63b5e5c8173cebcc1a5341df045cf6dad7adc72616e646f6d20737461746520706172616d732e72756c65536c6f74496e646578496e70757472616e646f6d20737461746520706172616d732e72756c65536c6f74496e6465784f7574707574a264697066735822122056280c0a529d31594d84dbcd746468f7fd6ea865eb9d508e7303cf9ab430d85e64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101015760003560e01c80638ad0495a1161009d5780638ad0495a1461020a5780638b38b514146102345780639010d07c1461024957806391d1485414610274578063a217fddf14610287578063a8ed9ef91461028f578063b480199c146102a2578063c4d66de8146102b5578063ca15c873146102c8578063d547741f146102db57600080fd5b806301ffc9a7146101065780631b6ef17a1461012e578063248a9ca31461014e5780632f2ff15d1461018057806334c76b251461019557806336568abe146101ca57806354fd4d50146101dd578063716d7b40146101e4578063757db4d8146101f7575b600080fd5b610119610114366004614481565b6102ee565b60405190151581526020015b60405180910390f35b61014161013c366004614643565b610319565b604051610125919061474d565b61017261015c3660046147af565b6000908152600160208190526040909120015490565b604051908152602001610125565b61019361018e3660046147c8565b6115ab565b005b60408051808201825260138152722127a9a9afa420a7222622a92fa422a62822a960691b6020820152905161012591906147f8565b6101936101d83660046147c8565b6115d6565b6000610172565b6101196101f236600461480b565b611659565b610193610205366004614839565b6117b3565b61021d61021836600461480b565b61197d565b604080519215158352602083019190915201610125565b61017260008051602061507483398151915281565b61025c6102573660046148e8565b6119fa565b6040516001600160a01b039091168152602001610125565b6101196102823660046147c8565b611a19565b610172600081565b61019361029d36600461490a565b611a44565b6101936102b0366004614956565b611b00565b6101936102c3366004614a47565b611ccf565b6101726102d63660046147af565b611d62565b6101936102e93660046147c8565b611d79565b60006001600160e01b03198216635a05180f60e01b1480610313575061031382611d9f565b92915050565b606080600019860161058c5760006103318582611dd4565b60008781526004602090815260408083208484528252918290208251600680825260e0820190945293945092919082015b606081526020019060019003908161036257505060408051808201909152600381526261746b60e81b602082015282549194506103a49163ffffffff16611e39565b836000815181106103b7576103b7614a64565b6020026020010181905250610401604051806040016040528060038152602001623232b360e91b8152508260000160049054906101000a900463ffffffff1663ffffffff16611e39565b8360018151811061041457610414614a64565b602002602001018190525061045d6040518060400160405280600281526020016118d960f21b8152508260000160089054906101000a900463ffffffff1663ffffffff16611e39565b8360028151811061047057610470614a64565b60200260200101819052506104b96040518060400160405280600281526020016106e760f41b81525082600001600c9054906101000a900463ffffffff1663ffffffff16611e39565b836003815181106104cc576104cc614a64565b6020026020010181905250610503604051806040016040528060068152602001651c995dd85c9960d21b8152508260010154611e39565b8360048151811061051657610516614a64565b60200260200101819052506105676040518060400160405280600a815260200169626174746c6554696d6560b01b8152508260020160009054906101000a900463ffffffff1663ffffffff16611e39565b8360058151811061057a5761057a614a64565b602002602001018190525050506115a2565b6001198601610dc25760006105a18582611f4f565b60008781526005602090815260408083206001600160a01b03851680855292529182902060c088019190915281516007808252610100820190935292935091606091816020015b60608152602001906001900390816105e8575050825490945063ffffffff166000819003610614575060015b600183015460009015610645578360010160008154811061063757610637614a64565b906000526020600020015490505b6001840154600211610710576001848101546106619190614a90565b6001600160401b03811115610678576106786144ab565b6040519080825280602002602001820160405280156106a1578160200160208202803683370190505b50925060015b600185015481101561070e578460010181815481106106c8576106c8614a64565b9060005260206000200154846001836106e19190614a90565b815181106106f1576106f1614a64565b60209081029190910101528061070681614aa3565b9150506106a7565b505b61073f6040518060400160405280600d81526020016c1b995e1d109bdcdcd3195d995b609a1b81525083611e39565b8660008151811061075257610752614a64565b60200260200101819052506107a56040518060400160405280600c81526020016b756e46726f7a656e54696d6560a01b8152508560000160049054906101000a900463ffffffff1663ffffffff16611e39565b866001815181106107b8576107b8614a64565b60200260200101819052506107ec604051806040016040528060078152602001666865726f49647360c81b81525084611f9a565b866002815181106107ff576107ff614a64565b6020026020010181905250610830604051806040016040528060048152602001631b9c125960e21b81525082611e39565b8660038151811061084357610843614a64565b602002602001018190525061089f6040518060400160405280600681526020016575736572534360d01b81525061271086600201541015610888578560020154611e39565b612710866002015461089a9190614a90565b611e39565b866004815181106108b2576108b2614a64565b60200260200101819052505050600081516000036108d257506001610cc0565b60016004840154600160c01b900460ff1660028111156108f4576108f4614abc565b0361090157506002610cc0565b60026004840154600160c01b900460ff16600281111561092357610923614abc565b03610cc057600354875160208901516040808b015160608c015160808d015160a08e015193516360653c6360e11b81523060048201526001600160a01b03968716602482015263ffffffff958616604482015261ffff9384166064820152929091166084830152841660a4820152911660c482015286821660e4820152600092919091169063c0ca78c690610104016101e060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190614b04565b9050610a396040518060400160405280601f81526020017f72616e646f6d20737461746520706172616d732e636c7573746572417265610081525089600001516120dc565b610a826040518060400160405280601d81526020017f72616e646f6d20737461746520706172616d732e636c75737465724964000000815250896020015163ffffffff16612121565b610aac60405180606001604052806026815260200161509460269139896040015161ffff16612121565b610ad66040518060600160405280602781526020016150ba60279139896060015161ffff16612121565b610b10604051806040016040528060148152602001733930b73237b69039ba30ba329031b7bab73a32b960611b81525089608001516120dc565b610b4f604051806040016040528060138152602001721c985b991bdb481cdd185d19481d185cdad259606a1b8152508960a0015163ffffffff16612121565b610b88604051806040016040528060138152602001723930b73237b69039ba30ba329031b0b63632b960691b8152508960c001516120dc565b610bd26040518060400160405280601e81526020017f72616e646f6d20737461746520667574757265426c6f636b4e756d626572000081525082610180015163ffffffff16612121565b610c0d604051806040016040528060198152602001783930b73237b69039ba30ba3290313637b1b590373ab6b132b960391b81525043612121565b610c516040518060400160405280601f81526020017f72616e646f6d20737461746520667574757265426c6f636b48617368496e7400815250826101c00151612121565b4381610180015163ffffffff161115610c6d5760039150610cbe565b600081610180015163ffffffff16118015610c8b57506101c0810151155b15610c995760069150610cbe565b6000610ca58b8a612166565b5090508015610cb75760049250610cbc565b600592505b505b505b610ce760405180604001604052806005815260200164737461746560d81b81525082611e39565b85600581518110610cfa57610cfa614a64565b602002602001018190525060008251600014610d6d5760008a8152600460208181526040808420885463ffffffff9081168652925283206002015491870154610d4e92821691600160a01b90910416614c1a565b63ffffffff16905042811115610d6b57610d684282614a90565b91505b505b610d9a6040518060400160405280600b81526020016a3232b630bca932b6b0b4b760a91b81525082611e39565b86600681518110610dad57610dad614a64565b602002602001018190525050505050506115a2565b60021986016110a257604080516007808252610100820190925290816020015b6060815260200190600190039081610de257505060008681526006602090815260409182902082518084019093526005835264185d1ad25960da1b91830191909152805492935091610e3a919063ffffffff16611e39565b82600081518110610e4d57610e4d614a64565b6020026020010181905250610e9960405180604001604052806005815260200164191959925960da1b8152508260000160049054906101000a900463ffffffff1663ffffffff16611e39565b82600181518110610eac57610eac614a64565b6020026020010181905250610ef7604051806040016040528060048152602001631b9c125960e21b8152508260000160089054906101000a900463ffffffff1663ffffffff16611e39565b82600281518110610f0a57610f0a614a64565b6020026020010181905250610f566040518060400160405280600581526020016439b1abb4b760d91b81525082600001600c9054906101000a900463ffffffff1663ffffffff16611e39565b82600381518110610f6957610f69614a64565b6020026020010181905250610fb8604051806040016040528060088152602001671cd8d39bdc9b585b60c21b8152508260000160109054906101000a900463ffffffff1663ffffffff16611e39565b82600481518110610fcb57610fcb614a64565b60200260200101819052506110186040518060400160405280600681526020016573634c6f737360d01b8152508260000160149054906101000a900463ffffffff1663ffffffff16611e39565b8260058151811061102b5761102b614a64565b602002602001018190525061107e6040518060400160405280600c81526020016b189bdcdcd3585e13195d995b60a21b8152508260000160189054906101000a900463ffffffff1663ffffffff16611e39565b8260068151811061109157611091614a64565b6020026020010181905250506115a2565b60031986016115a25760006110b88660066125e3565b63ffffffff1690506000816001600160401b038111156110da576110da6144ab565b604051908082528060200260200182016040528015611103578160200160208202803683370190505b5090506000826001600160401b03811115611120576111206144ab565b604051908082528060200260200182016040528015611149578160200160208202803683370190505b5090506000836001600160401b03811115611166576111666144ab565b60405190808252806020026020018201604052801561118f578160200160208202803683370190505b5090506000846001600160401b038111156111ac576111ac6144ab565b6040519080825280602002602001820160405280156111d5578160200160208202803683370190505b5090506000856001600160401b038111156111f2576111f26144ab565b60405190808252806020026020018201604052801561121b578160200160208202803683370190505b5090506000866001600160401b03811115611238576112386144ab565b604051908082528060200260200182016040528015611261578160200160208202803683370190505b5060408051600680825260e08201909252919250816020015b606081526020019060019003908161127a57905050975060015b8781116113f95760008d81526004602090815260408083208484529091529020805463ffffffff16886112c8600185614a90565b815181106112d8576112d8614a64565b60209081029190910101528054600160201b900463ffffffff16876112fe600185614a90565b8151811061130e5761130e614a64565b60209081029190910101528054600160401b900463ffffffff1686611334600185614a90565b8151811061134457611344614a64565b60209081029190910101528054600160601b900463ffffffff168561136a600185614a90565b8151811061137a5761137a614a64565b6020026020010181815250508060010154846001846113999190614a90565b815181106113a9576113a9614a64565b6020908102919091010152600281015463ffffffff16836113cb600185614a90565b815181106113db576113db614a64565b602090810291909101015250806113f181614aa3565b915050611294565b506114206040518060400160405280600481526020016361746b7360e01b81525087611f9a565b8860008151811061143357611433614a64565b6020026020010181905250611464604051806040016040528060048152602001636465667360e01b81525086611f9a565b8860018151811061147757611477614a64565b60200260200101819052506114a76040518060400160405280600381526020016263647360e81b81525085611f9a565b886002815181106114ba576114ba614a64565b60200260200101819052506114ea604051806040016040528060038152602001626e707360e81b81525084611f9a565b886003815181106114fd576114fd614a64565b6020026020010181905250611531604051806040016040528060078152602001667265776172647360c81b81525083611f9a565b8860048151811061154457611544614a64565b602002602001018190525061157c6040518060400160405280600b81526020016a626174746c6554696d657360a81b81525082611f9a565b8860058151811061158f5761158f614a64565b6020026020010181905250505050505050505b95945050505050565b600082815260016020819052604090912001546115c78161272d565b6115d1838361273a565b505050565b6001600160a01b038116331461164b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611655828261275c565b5050565b60006000805160206150748339815191526116738161272d565b600084815260056020908152604080832060c08701516001600160a01b03168452909152902060016004820154600160c01b900460ff1660028111156116bb576116bb614abc565b146116ff5760405162461bcd60e51b815260206004820152601460248201527318d85b1b195c881a185cc81b9bdd081a5b9c1d5d60621b6044820152606401611642565b6004818101805460ff60c01b1916600160c11b1790819055600087815260209283526040808220855463ffffffff908116845294529020600201548216914291611752918491600160a01b900416614c1a565b63ffffffff16111561179e5760405162461bcd60e51b81526020600482015260156024820152740c8cad8c2f240e8d2daca40dcdee840cadcdeeaced605b1b6044820152606401611642565b6117a78561277e565b935050505b5092915050565b6000805160206150748339815191526117cb8161272d565b6000848152600460209081526040808320868452825280832085518154878501518885015160608a015163ffffffff94851667ffffffffffffffff1990941693909317600160201b928516929092029190911767ffffffffffffffff60401b1916600160401b9184169190910263ffffffff60601b191617600160601b918316919091021782556080870151600183015560a08701516002909201805463ffffffff191692821692909217909155878452600690925290912080549091600160c01b90910416841115611976576118c46040518060400160405280600a8152602001691d1a1a5cc81b195d995b60b21b81525085612121565b6040805180820190915260098152681b585e081b195d995b60ba1b602082015281546118fd9190600160c01b900463ffffffff16612121565b805461191790600160c01b900463ffffffff166001614c1a565b63ffffffff1684146119595760405162461bcd60e51b815260206004820152600b60248201526a3632bb32b61032b93937b960a91b6044820152606401611642565b805463ffffffff60c01b1916600160c01b63ffffffff8616021781555b5050505050565b6000806000805160206150748339815191526119988161272d565b6000806119a58787612166565b600089815260056020908152604080832060c08c0180516001600160a01b03168552925290912090518154939550919350916119ea918a91869063ffffffff1661284a565b509194509250505b509250929050565b6000828152600260205260408120611a12908361293f565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020615074833981519152611a5c8161272d565b50600096875260066020526040909620805463ffffffff978816600160a01b0263ffffffff60a01b19938916600160801b029390931667ffffffffffffffff60801b19948916600160601b0263ffffffff60601b19968a16600160401b029690961667ffffffffffffffff60401b19978a16600160201b0267ffffffffffffffff199093169990981698909817179490941694909417919091171692909217179055565b600080516020615074833981519152611b188161272d565b6000805b8451811015611b6657848181518110611b3757611b37614a64565b6020026020010151600014611b545781611b5081614aa3565b9250505b80611b5e81614aa3565b915050611b1c565b506000816001600160401b03811115611b8157611b816144ab565b604051908082528060200260200182016040528015611baa578160200160208202803683370190505b5090506000915060005b8551811015611c3557858181518110611bcf57611bcf614a64565b6020026020010151600014611c2357858181518110611bf057611bf0614a64565b6020026020010151828480611c0490614aa3565b955081518110611c1657611c16614a64565b6020026020010181815250505b80611c2d81614aa3565b915050611bb4565b5060008981526005602090815260408083206001600160a01b038c8116855292529091206003810180546001600160a01b0319168a8416179055600481018054600283018890559289166001600160c01b031990931692909217600160a01b4263ffffffff160217808355909160019160ff60c01b1916600160c01b830217905550611cc38a8a848861294b565b50505050505050505050565b6000611cdb6001612bab565b90508015611cf3576000805461ff0019166101001790555b600380546001600160a01b0319166001600160a01b038416179055611d19600033612c38565b8015611655576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260026020526040812061031390612c42565b60008281526001602081905260409091200154611d958161272d565b6115d1838361275c565b60006001600160e01b03198216637965db0b60e01b148061031357506301ffc9a760e01b6001600160e01b0319831614610313565b600080611de8611de385612c4c565b612c79565b9050611e31611e12828560ff1681518110611e0557611e05614a64565b6020026020010151612c79565b600281518110611e2457611e24614a64565b6020026020010151612d8e565b949350505050565b60606000611e4684612ddb565b90506000611e5384612de6565b9050611e966040518060400160405280600e81526020016d0b4b4b4b4b4b4b481d1bd55a5b9d60921b815250611e9183611e8c90614c37565b612df9565b612e45565b60408051600380825260808201909252600091816020015b6060815260200190600190039081611eae5790505090508281600081518110611ed957611ed9614a64565b6020026020010181905250611f09604051806040016040528060048152602001631d5a5b9d60e21b815250612ddb565b81600181518110611f1c57611f1c614a64565b60200260200101819052508181600281518110611f3b57611f3b614a64565b60200260200101819052506117a781612e8a565b600080611f5e611de385612c4c565b9050611e31611f7b828560ff1681518110611e0557611e05614a64565b600281518110611f8d57611f8d614a64565b6020026020010151612f08565b60606000611fa784612ddb565b9050600083516002611fb99190614c5b565b6001600160401b03811115611fd057611fd06144ab565b60405190808252806020026020018201604052801561200357816020015b6060815260200190600190039081611fee5790505b509050818160008151811061201a5761201a614a64565b602002602001018190525061204e604051806040016040528060088152602001671d5a5b9d131a5cdd60c21b815250612ddb565b8160018151811061206157612061614a64565b602002602001018190525060005b84518110156120d25761209a85828151811061208d5761208d614a64565b6020026020010151612de6565b826120a6836002614c5b565b815181106120b6576120b6614a64565b6020026020010181905250806120cb90614aa3565b905061206f565b506115a281612e8a565b61165582826040516024016120f2929190614c6e565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612f22565b6116558282604051602401612137929190614c98565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052612f22565b600082815260056020908152604080832060c08501516001600160a01b031684529091528120600181015482919082906001600160401b038111156121ad576121ad6144ab565b6040519080825280602002602001820160405280156121d6578160200160208202803683370190505b509050600085600001516001600160a01b03166393b441dc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122419190614cba565b6001600160a01b0316636a9b94b16001606489602001518760030160009054906101000a90046001600160a01b03168860010160008154811061228657612286614a64565b906000526020600020015461229c8e60026125e3565b6040518763ffffffff1660e01b81526004016122bd96959493929190614cd7565b602060405180830381865afa1580156122da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fe9190614d18565b64ffffffffff169050808260008151811061231b5761231b614a64565b60200260200101818152505061234f60405180604001604052806006815260200165373820ba3a3960d11b81525082612121565b5060015b600183015481101561251b5785600001516001600160a01b03166393b441dc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c59190614cba565b6001600160a01b0316636a9b94b16001606489602001518760040160009054906101000a90046001600160a01b031688600101878154811061240957612409614a64565b906000526020600020015461241f8e60006125e3565b6040518763ffffffff1660e01b815260040161244096959493929190614cd7565b602060405180830381865afa15801561245d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124819190614d18565b64ffffffffff1682828151811061249a5761249a614a64565b6020026020010181815250506124ca60405180604001604052806002815260200161693d60f01b81525082612121565b6125096040518060400160405280600481526020016361746b7360e01b8152508383815181106124fc576124fc614a64565b6020026020010151612121565b8061251381614aa3565b915050612353565b50600061252786612f2b565b905061256160405180604001604052806016815260200175676574426174746c65526573756c742072616e646f6d60501b81525082612121565b8060000361257857600080945094505050506125dc565b612583600382614d51565b9050600061259c888860c0015185876002015486613012565b90506000816125ac5760006125d1565b6000898152600460209081526040808320885463ffffffff1684529091529020600101545b919650909450505050505b9250929050565b6000828152600660205260408120818084600681111561260557612605614abc565b036126185750805463ffffffff16611e31565b600184600681111561262c5761262c614abc565b0361264657508054600160201b900463ffffffff16611e31565b600284600681111561265a5761265a614abc565b0361267457508054600160401b900463ffffffff16611e31565b600384600681111561268857612688614abc565b036126a257508054600160601b900463ffffffff16611e31565b60048460068111156126b6576126b6614abc565b036126d057508054600160801b900463ffffffff16611e31565b60058460068111156126e4576126e4614abc565b036126fe57508054600160a01b900463ffffffff16611e31565b600684600681111561271257612712614abc565b03611e31575054600160c01b900463ffffffff169392505050565b61273781336131fc565b50565b6127448282613255565b60008281526002602052604090206115d190826132c0565b61276682826132d5565b60008281526002602052604090206115d1908261333c565b600354815160208301516040808501516060860151608087015160a088015160c0890151945163063738cb60e01b81526001600160a01b03978816600482015263ffffffff968716602482015261ffff9485166044820152939092166064840152851660848301529290921660a4830152821660c4820152600092919091169063063738cb9060e4016020604051808303816000875af1158015612826573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190614d65565b60008481526005602090815260408083206001600160a01b0387168452825280832087845260048352818420858552909252822061288b6001830184614403565b6004820180546003840180546001600160a01b0319169055600164ff0000000160a01b0319169055600085156128f357825463ffffffff168360006128cf83614d87565b91906101000a81548163ffffffff021916908363ffffffff16021790555050612934565b815461290c90600160401b900463ffffffff1642614c5b565b835463ffffffff91909116600160201b0267ffffffff00000000199091161783555060018101545b979650505050505050565b6000611a128383613351565b60008481526005602090815260408083206001600160a01b0387168452825291829020805483518085019094526017845276426f737348616e646c65722074696d6520667265657a6560481b9284019290925291600160201b90910463ffffffff164290811015916129dd916129c09061337b565b84546129d890600160201b900463ffffffff1661337b565b613386565b906129fb5760405162461bcd60e51b815260040161164291906147f8565b50600181015415612a425760405162461bcd60e51b8152602060048201526011602482015270616c726561647920696e20626174746c6560781b6044820152606401611642565b600283511015612a7e5760405162461bcd60e51b815260206004820152600760248201526634b2399032b93960c91b6044820152606401611642565b612aa86040518060400160405280600881526020016763616c6c6572534360c01b81525083612121565b612ab56000612710614daa565b61ffff168210158015612ad85750612ad06002612710614daa565b61ffff168211155b612b155760405162461bcd60e51b815260206004820152600e60248201526d31b0b63632b929a19032b93937b960911b6044820152606401611642565b8251612b2a9060018301906020860190614421565b506000612b388660066125e3565b825463ffffffff918216925016600003612b5b57815463ffffffff191660011782555b815463ffffffff16811015612ba35760405162461bcd60e51b815260206004820152600e60248201526d36b0bc2632bb32b61032b93937b960911b6044820152606401611642565b505050505050565b60008054610100900460ff1615612bf2578160ff166001148015612bce5750303b155b612bea5760405162461bcd60e51b815260040161164290614dc5565b506000919050565b60005460ff808416911610612c195760405162461bcd60e51b815260040161164290614dc5565b506000805460ff191660ff92909216919091179055600190565b919050565b611655828261273a565b6000610313825490565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060612c84826133b5565b612c8d57600080fd5b6000612c98836133f0565b90506000816001600160401b03811115612cb457612cb46144ab565b604051908082528060200260200182016040528015612cf957816020015b6040805180820190915260008082526020820152815260200190600190039081612cd25790505b5090506000612d0b8560200151613475565b8560200151612d1a9190614c5b565b90506000805b84811015612d8357612d31836134f6565b9150604051806040016040528083815260200184815250848281518110612d5a57612d5a614a64565b6020908102919091010152612d6f8284614c5b565b925080612d7b81614aa3565b915050612d20565b509195945050505050565b805160009015801590612da357508151602110155b612dac57600080fd5b600080612db88461359a565b815191935091506020821015611e315760208290036101000a9004949350505050565b6060610313826135e1565b6060610313612df483613631565b6135e1565b6060612e048261376b565b612e11608084901b61376b565b60405161060f60f31b6020820152602281019290925260428201526062016040516020818303038152906040529050919050565b6116558282604051602401612e5b929190614e13565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052612f22565b6060612eb96040518060400160405280600c81526020016b656e636f64654c697374203160a01b815250613915565b6000612ec483613958565b9050612ef36040518060400160405280600c81526020016b32b731b7b232a634b9ba101960a11b815250613915565b611a12612f02825160c0613a88565b82613c3e565b8051600090601514612f1957600080fd5b61031382612d8e565b61273781613cbb565b600354815160208301516040808501516060860151608087015160a088015160c0890151945163452d593f60e11b81526101006004820152600261010482015261060f60f31b6101248201526001600160a01b03978816602482015263ffffffff968716604482015261ffff9485166064820152939092166084840152851660a48301529290921660c4830152821660e48201526000929190911690638a5ab27e9061014401602060405180830381865afa158015612fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103139190614e38565b60006002845110156130585760405162461bcd60e51b815260206004820152600f60248201526e0d0cae4de40dcdee840cadcdeeaced608b1b6044820152606401611642565b60008681526005602090815260408083206001600160a01b038916845290915281209060015b86518110156130c05786818151811061309957613099614a64565b6020026020010151826130ac9190614c5b565b9150806130b881614aa3565b91505061307e565b506064866000815181106130d6576130d6614a64565b60200260200101516130e89190614c5b565b6130f29082614e51565b90506130ff888686613cdc565b6131099082614e51565b8254909150600090613122908a9063ffffffff16613d6c565b9050613157604051806040016040528060118152602001705f626174746c65206865726f206461746160781b81525083612121565b61318a604051806040016040528060118152602001705f626174746c6520626f7373206461746160781b81525082612121565b6131b26040518060400160405280600681526020016575736572534360d01b81525087612121565b6131da60405180604001604052806006815260200165626f7373534360d01b81525086612121565b82546131ed908a9063ffffffff16613d6c565b90911198975050505050505050565b6132068282611a19565b6116555761321381613f30565b61321e836020613f42565b60405160200161322f929190614e68565b60408051601f198184030181529082905262461bcd60e51b8252611642916004016147f8565b61325f8282611a19565b6116555760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611a12836001600160a01b0384166140dd565b6132df8282611a19565b156116555760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611a12836001600160a01b03841661412c565b600082600001828154811061336857613368614a64565b9060005260206000200154905092915050565b60606103138261421f565b606083838360405160200161339d93929190614ed7565b60405160208183030381529060405290509392505050565b805160009081036133c857506000919050565b6020820151805160001a9060c08210156133e6575060009392505050565b5060019392505050565b8051600090810361340357506000919050565b6000806134138460200151613475565b84602001516134229190614c5b565b905060008460000151856020015161343a9190614c5b565b90505b8082101561346c5761344e826134f6565b6134589083614c5b565b91508261346481614aa3565b93505061343d565b50909392505050565b8051600090811a608081101561348e5750600092915050565b60b88110806134a9575060c081108015906134a9575060f881105b156134b75750600192915050565b60c08110156134e4576134cc600160b8614f31565b6134d99060ff1682614a90565b611a12906001614c5b565b6134cc600160f8614f31565b50919050565b80516000908190811a608081101561351157600191506117ac565b60b881101561353757613525608082614a90565b613530906001614c5b565b91506117ac565b60c08110156135645760b78103600185019450806020036101000a855104600182018101935050506117ac565b60f88110156135785761352560c082614a90565b60019390930151602084900360f7016101000a900490920160f5190192915050565b60008060006135ac8460200151613475565b905060008185602001516135c09190614c5b565b905060008286600001516135d49190614a90565b9196919550909350505050565b60608082516001148015613610575060808360008151811061360557613605614a64565b016020015160f81c11155b1561361c575081610313565b611a1261362b84516080613a88565b84613c3e565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b60208110156136a25781818151811061367a5761367a614a64565b01602001516001600160f81b0319166000036136a2578061369a81614aa3565b91505061365f565b60006136af826020614a90565b6001600160401b038111156136c6576136c66144ab565b6040519080825280601f01601f1916602001820160405280156136f0576020820181803683370190505b50905060005b815181101561376257838361370a81614aa3565b94508151811061371c5761371c614a64565b602001015160f81c60f81b82828151811061373957613739614a64565b60200101906001600160f81b031916908160001a9053508061375a81614aa3565b9150506136f6565b50949350505050565b7aff00000000000000ff00000000000000ff00000000000000ff000063ffffffff60401b604083901c90811663ffffffff60c01b84161760201c63ffffffff60601b919091166001600160e01b031984161717601081901c91821678ff00000000000000ff00000000000000ff00000000000000ff60301b821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c1617906138b1827f0606060606060606060606060606060606060606060606060606060606060606614c5b565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1660076138e19190614e51565b61390b827f3030303030303030303030303030303030303030303030303030303030303030614c5b565b6103139190614c5b565b6127378160405160240161392991906147f8565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612f22565b606081516000036139795760408051600080825260208201909252906117ac565b6000805b83518110156139c05783818151811061399857613998614a64565b602002602001015151826139ac9190614c5b565b9150806139b881614aa3565b91505061397d565b6000826001600160401b038111156139da576139da6144ab565b6040519080825280601f01601f191660200182016040528015613a04576020820181803683370190505b50600092509050602081015b8551831015613762576000868481518110613a2d57613a2d614a64565b602002602001015190506000602082019050613a4b838284516142b1565b878581518110613a5d57613a5d614a64565b60200260200101515183613a719190614c5b565b925050508280613a8090614aa3565b935050613a10565b6060806038841015613af25760408051600180825281830190925290602082018180368337019050509050613abd8385614c5b565b601f1a60f81b81600081518110613ad657613ad6614a64565b60200101906001600160f81b031916908160001a905350611a12565b600060015b613b018187614f4a565b15613b275781613b1081614aa3565b9250613b20905061010082614e51565b9050613af7565b613b32826001614c5b565b6001600160401b03811115613b4957613b496144ab565b6040519080825280601f01601f191660200182016040528015613b73576020820181803683370190505b509250613b808583614c5b565b613b8b906037614c5b565b601f1a60f81b83600081518110613ba457613ba4614a64565b60200101906001600160f81b031916908160001a905350600190505b818111613c3557610100613bd48284614a90565b613be09061010061503a565b613bea9088614f4a565b613bf49190614d51565b601f1a60f81b838281518110613c0c57613c0c614a64565b60200101906001600160f81b031916908160001a90535080613c2d81614aa3565b915050613bc0565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015613c6f578051835260209283019201613c57565b50855184518101855292509050808201602086015b81831015613c9c578051835260209283019201613c84565b508651929092011591909101601f01601f191660405250905092915050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6000613cea61271084614a90565b9250818303613d0b57613cfe8460046125e3565b63ffffffff169050611a12565b82158015613d195750600282145b80613d2d5750600183148015613d2d575081155b80613d435750600283148015613d435750600182145b15613d5357613cfe8460056125e3565b613d5e8460036125e3565b63ffffffff16949350505050565b60008281526004602090815260408083208484528252808320815160c081018352815463ffffffff8082168352600160201b8204811683870152600160401b8204811683860152600160601b9091048116606083015260018301546080830152600290920154821660a08201528251808401909352601083526f5f676574426f7373446174612061746b60801b938301939093528251613e0d929116612121565b613e496040518060400160405280601081526020016f2fb3b2ba2137b9b9a230ba30903232b360811b815250826020015163ffffffff16612121565b613e846040518060400160405280600f81526020016e17d9d95d109bdcdcd1185d184818d9608a1b815250826040015163ffffffff16612121565b613ebf6040518060400160405280600f81526020016e05f676574426f737344617461206e7608c1b815250826060015163ffffffff16612121565b613ef86040518060400160405280601381526020017217d9d95d109bdcdcd1185d18481c995dd85c99606a1b8152508260800151612121565b6064816060015163ffffffff166064613f119190614c5b565b826020015163ffffffff16613f269190614e51565b611e319190614e51565b60606103136001600160a01b03831660145b60606000613f51836002614e51565b613f5c906002614c5b565b6001600160401b03811115613f7357613f736144ab565b6040519080825280601f01601f191660200182016040528015613f9d576020820181803683370190505b509050600360fc1b81600081518110613fb857613fb8614a64565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fe757613fe7614a64565b60200101906001600160f81b031916908160001a905350600061400b846002614e51565b614016906001614c5b565b90505b600181111561408e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061404a5761404a614a64565b1a60f81b82828151811061406057614060614a64565b60200101906001600160f81b031916908160001a90535060049490941c9361408781615046565b9050614019565b508315611a125760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611642565b600081815260018301602052604081205461412457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610313565b506000610313565b60008181526001830160205260408120548015614215576000614150600183614a90565b855490915060009061416490600190614a90565b90508181146141c957600086600001828154811061418457614184614a64565b90600052602060002001549050808760000184815481106141a7576141a7614a64565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806141da576141da61505d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610313565b6000915050610313565b6060600061422c8361432d565b60010190506000816001600160401b0381111561424b5761424b6144ab565b6040519080825280601f01601f191660200182016040528015614275576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461427f57509392505050565b8282825b602081106142ed57815183526142cc602084614c5b565b92506142d9602083614c5b565b91506142e6602082614a90565b90506142b5565b8015612ba35760006001614302836020614a90565b61430e9061010061503a565b6143189190614a90565b83518551821691191617845250505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061436c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310614396576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106143b457662386f26fc10000830492506010015b6305f5e10083106143cc576305f5e100830492506008015b61271083106143e057612710830492506004015b606483106143f2576064830492506002015b600a83106103135760010192915050565b5080546000825590600052602060002090810190612737919061446c565b82805482825590600052602060002090810192821561445c579160200282015b8281111561445c578251825591602001919060010190614441565b5061446892915061446c565b5090565b5b80821115614468576000815560010161446d565b60006020828403121561449357600080fd5b81356001600160e01b031981168114611a1257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156144e3576144e36144ab565b60405290565b6040516101e081016001600160401b03811182821017156144e3576144e36144ab565b604051601f8201601f191681016001600160401b0381118282101715614534576145346144ab565b604052919050565b6001600160a01b038116811461273757600080fd5b8035612c338161453c565b63ffffffff8116811461273757600080fd5b8035612c338161455c565b61ffff8116811461273757600080fd5b600060e0828403121561459b57600080fd5b60405160e081018181106001600160401b03821117156145bd576145bd6144ab565b60405290508082356145ce8161453c565b815260208301356145de8161455c565b602082015260408301356145f181614579565b6040820152606083013561460481614579565b606082015261461560808401614551565b608082015261462660a0840161456e565b60a082015261463760c08401614551565b60c08201525092915050565b600080600080610140858703121561465a57600080fd5b84359350602080860135935060408601356001600160401b038082111561468057600080fd5b818801915088601f83011261469457600080fd5b8135818111156146a6576146a66144ab565b6146b8601f8201601f1916850161450c565b915080825289848285010111156146ce57600080fd5b80848401858401376000848284010152508094505050506146f28660608701614589565b905092959194509250565b60005b83811015614718578181015183820152602001614700565b50506000910152565b600081518084526147398160208601602086016146fd565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156147a257603f19888603018452614790858351614721565b94509285019290850190600101614774565b5092979650505050505050565b6000602082840312156147c157600080fd5b5035919050565b600080604083850312156147db57600080fd5b8235915060208301356147ed8161453c565b809150509250929050565b602081526000611a126020830184614721565b600080610100838503121561481f57600080fd5b823591506148308460208501614589565b90509250929050565b600080600083850361010081121561485057600080fd5b843593506020850135925060c0603f198201121561486d57600080fd5b506148766144c1565b60408501356148848161455c565b815260608501356148948161455c565b602082015260808501356148a78161455c565b604082015260a08501356148ba8161455c565b606082015260c0850135608082015260e08501356148d78161455c565b60a082015292959194509192509050565b600080604083850312156148fb57600080fd5b50508035926020909101359150565b600080600080600080600060e0888a03121561492557600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060008060008060c0878903121561496f57600080fd5b863595506020808801356149828161453c565b955060408801356149928161453c565b945060608801356149a28161453c565b935060808801356001600160401b03808211156149be57600080fd5b818a0191508a601f8301126149d257600080fd5b8135818111156149e4576149e46144ab565b8060051b91506149f584830161450c565b818152918301840191848101908d841115614a0f57600080fd5b938501935b83851015614a2d57843582529385019390850190614a14565b80975050505050505060a087013590509295509295509295565b600060208284031215614a5957600080fd5b8135611a128161453c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561031357610313614a7a565b600060018201614ab557614ab5614a7a565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8051612c338161453c565b8051612c338161455c565b8051612c3381614579565b805160ff81168114612c3357600080fd5b60006101e08284031215614b1757600080fd5b614b1f6144e9565b614b2883614ad2565b8152614b3660208401614ad2565b6020820152614b4760408401614ad2565b6040820152614b5860608401614ad2565b6060820152614b6960808401614add565b6080820152614b7a60a08401614ae8565b60a0820152614b8b60c08401614ae8565b60c0820152614b9c60e08401614add565b60e0820152610100614baf818501614add565b90820152610120614bc1848201614add565b90820152610140614bd3848201614af3565b90820152610160614be5848201614af3565b90820152610180614bf7848201614add565b908201526101a083810151908201526101c0928301519281019290925250919050565b63ffffffff8181168382160190808211156117ac576117ac614a7a565b805160208083015191908110156134f05760001960209190910360031b1b16919050565b8082018082111561031357610313614a7a565b604081526000614c816040830185614721565b905060018060a01b03831660208301529392505050565b604081526000614cab6040830185614721565b90508260208301529392505050565b600060208284031215614ccc57600080fd5b8151611a128161453c565b60ff968716815294909516602085015263ffffffff92831660408501526001600160a01b03919091166060840152608083015290911660a082015260c00190565b600060208284031215614d2a57600080fd5b81518060040b8114611a1257600080fd5b634e487b7160e01b600052601260045260246000fd5b600082614d6057614d60614d3b565b500690565b600060208284031215614d7757600080fd5b81518015158114611a1257600080fd5b600063ffffffff808316818103614da057614da0614a7a565b6001019392505050565b61ffff8181168382160190808211156117ac576117ac614a7a565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b604081526000614e266040830185614721565b82810360208401526115a28185614721565b600060208284031215614e4a57600080fd5b5051919050565b808202811582820484141761031357610313614a7a565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614e9a8160178501602088016146fd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614ecb8160288401602088016146fd565b01602801949350505050565b60008451614ee98184602089016146fd565b8083019050600b60fa1b8082528551614f09816001850160208a016146fd565b60019201918201528351614f248160028401602088016146fd565b0160020195945050505050565b60ff828116828216039081111561031357610313614a7a565b600082614f5957614f59614d3b565b500490565b600181815b808511156119f2578160001904821115614f7f57614f7f614a7a565b80851615614f8c57918102915b93841c9390800290614f63565b600082614fa857506001610313565b81614fb557506000610313565b8160018114614fcb5760028114614fd557614ff1565b6001915050610313565b60ff841115614fe657614fe6614a7a565b50506001821b610313565b5060208310610133831016604e8410600b8410161715615014575081810a610313565b61501e8383614f5e565b806000190482111561503257615032614a7a565b029392505050565b6000611a128383614f99565b60008161505557615055614a7a565b506000190190565b634e487b7160e01b600052603160045260246000fdfe5297e68f3a27f04914f2c6db0ad63b5e5c8173cebcc1a5341df045cf6dad7adc72616e646f6d20737461746520706172616d732e72756c65536c6f74496e646578496e70757472616e646f6d20737461746520706172616d732e72756c65536c6f74496e6465784f7574707574a264697066735822122056280c0a529d31594d84dbcd746468f7fd6ea865eb9d508e7303cf9ab430d85e64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
