{
  "_format": "hh-sol-artifact-1",
  "contractName": "FullSignedBucketRiskModule",
  "sourceName": "contracts/FullSignedBucketRiskModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "policyPool_",
          "type": "address"
        },
        {
          "internalType": "contract IPremiumsAccount",
          "name": "premiumsAccount_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "BucketCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BucketNotFound",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExposureLimitCannotBeLessThanActiveExposure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroPolicyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroWallet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPolicyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PremiumsAccountMustBePartOfThePool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "QuoteExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UpgradeCannotChangePolicyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UpgradeCannotChangePremiumsAccount",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        }
      ],
      "name": "BucketDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum IAccessManager.GovernanceActions",
          "name": "action",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "value",
          "type": "address"
        }
      ],
      "name": "ComponentChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum IAccessManager.GovernanceActions",
          "name": "action",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "GovernanceAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "moc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCollRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroPpFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCocFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrRoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srRoc",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IRiskModule.Params",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "NewBucket",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        }
      ],
      "name": "NewSignedPolicy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "activeExposure",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        }
      ],
      "name": "bucketParams",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "moc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCollRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroPpFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCocFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrRoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srRoc",
              "type": "uint256"
            }
          ],
          "internalType": "struct IRiskModule.Params",
          "name": "params_",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        }
      ],
      "name": "deleteBucket",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "exposureLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        }
      ],
      "name": "getMinimumPremium",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        }
      ],
      "name": "getMinimumPremiumForBucket",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "moc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrCollRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "collRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroPpFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroCocFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "srRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "maxPayoutPerPolicy",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "exposureLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "maxDuration",
              "type": "uint16"
            }
          ],
          "internalType": "struct RiskModule.PackedParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getMinimumPremiumFullParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "collRatio_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "ensuroPpFee_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "srRoc_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxPayoutPerPolicy_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "exposureLimit_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "wallet_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxPayoutPerPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "moc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrCollRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "collRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroPpFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroCocFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "srRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "maxPayoutPerPolicy",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "exposureLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "maxDuration",
              "type": "uint16"
            }
          ],
          "internalType": "struct RiskModule.PackedParams",
          "name": "params",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicyFullParams",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "createdPolicy",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "params",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "moc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCollRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroPpFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCocFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrRoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srRoc",
              "type": "uint256"
            }
          ],
          "internalType": "struct IRiskModule.Params",
          "name": "ret",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyPool",
      "outputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "premiumsAccount",
      "outputs": [
        {
          "internalType": "contract IPremiumsAccount",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "releaseExposure",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "oldPolicy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "replacePolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "oldPolicy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "moc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrCollRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "collRatio",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroPpFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ensuroCocFee",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "jrRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "srRoc",
              "type": "uint16"
            },
            {
              "internalType": "uint32",
              "name": "maxPayoutPerPolicy",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "exposureLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "maxDuration",
              "type": "uint16"
            }
          ],
          "internalType": "struct RiskModule.PackedParams",
          "name": "params",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "replacePolicyFullParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "resolvePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "moc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCollRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "collRatio",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroPpFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCocFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrRoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srRoc",
              "type": "uint256"
            }
          ],
          "internalType": "struct IRiskModule.Params",
          "name": "params_",
          "type": "tuple"
        }
      ],
      "name": "setBucketParams",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum IRiskModule.Parameter",
          "name": "param",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "newValue",
          "type": "uint256"
        }
      ],
      "name": "setParam",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wallet_",
          "type": "address"
        }
      ],
      "name": "setWallet",
      "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": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405230608052348015610013575f5ffd5b50604051615f20380380615f20833981016040819052610032916101fc565b81818181816001600160a01b03811661005e57604051636b23cf0160e01b815260040160405180910390fd5b610066610129565b806001600160a01b031660a0816001600160a01b03168152505050816001600160a01b0316816001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100eb9190610234565b6001600160a01b0316146101125760405163fec343d560e01b815260040160405180910390fd5b6001600160a01b031660c052506102569350505050565b5f54610100900460ff16156101945760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146101e3575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101f9575f5ffd5b50565b5f5f6040838503121561020d575f5ffd5b8251610218816101e5565b6020840151909250610229816101e5565b809150509250929050565b5f60208284031215610244575f5ffd5b815161024f816101e5565b9392505050565b60805160a05160c051615bc06103605f395f81816103e00152613ba701525f81816102c3015281816107000152818161098f01528181610aa501528181610d6f015281816110d60152818161127a01528181611399015281816114930152818161152801528181611652015281816117a801528181611947015281816120130152818161214301528181612227015281816125f3015281816129d301528181612a7001528181612b2301528181612cf201528181613228015281816135e50152818161368201528181613728015281816138d5015281816139f2015261442e01525f8181610882015281816108cb01528181610bcc01528181610c0c0152610c990152615bc05ff3fe6080604052600436106101db575f3560e01c8063766dbc56116100fd578063b9b28f2a11610092578063cfd4c60611610062578063cfd4c606146105b9578063cff0ab96146105cd578063deaa59df146105e1578063e5a6b10f14610600575f5ffd5b8063b9b28f2a146104e8578063c1cca2b314610507578063ceddac6f14610526578063cf19171e1461059a575f5ffd5b80638456cb59116100cd5780638456cb591461047557806385272a6e146104895780638bac3a241461049d5780639014d171146104bc575f5ffd5b8063766dbc56146104045780637a702b3c146104235780637ff8bf251461044257806382ff9c8c14610456575f5ffd5b8063521eb273116101735780636a448ef1116101435780636a448ef1146103755780636db5c8fd146103945780636f0dbe6f146103b357806373a952e8146103d2575f5ffd5b8063521eb2731461030e57806352d1902d1461032b578063571e8bcc1461033f5780635c975abb1461035e575f5ffd5b80633f4ba83a116101ae5780633f4ba83a146102745780633f961587146102885780634d15eb03146102b55780634f1ef286146102fb575f5ffd5b806301ffc9a7146101df57806306fdde031461021357806318e26bb9146102345780633659cfe614610255575b5f5ffd5b3480156101ea575f5ffd5b506101fe6101f9366004614b62565b610614565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b5061022761063f565b60405161020a9190614b89565b34801561023f575f5ffd5b5061025361024e366004614bbe565b6106cf565b005b348015610260575f5ffd5b5061025361026f366004614be9565b610878565b34801561027f575f5ffd5b5061025361095e565b348015610293575f5ffd5b506102a76102a2366004614d5a565b610a79565b60405190815260200161020a565b3480156102c0575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161020a565b610253610309366004614e64565b610bc2565b348015610319575f5ffd5b5060fe546001600160a01b03166102e3565b348015610336575f5ffd5b506102a7610c8d565b34801561034a575f5ffd5b50610253610359366004614ec4565b610d3e565b348015610369575f5ffd5b5060975460ff166101fe565b348015610380575f5ffd5b5061025361038f366004614bbe565b6110d3565b34801561039f575f5ffd5b5060fc54600160b01b900461ffff166102a7565b3480156103be575f5ffd5b506102536103cd366004614efa565b611135565b3480156103dd575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102e3565b34801561040f575f5ffd5b506102a761041e366004614f89565b61124e565b34801561042e575f5ffd5b5061025361043d366004614ffd565b611376565b34801561044d575f5ffd5b5060fd546102a7565b348015610461575f5ffd5b506102a7610470366004615028565b6114fc565b348015610480575f5ffd5b5061025361162f565b348015610494575f5ffd5b506102a7611736565b3480156104a8575f5ffd5b506102a76104b73660046150a2565b611758565b3480156104c7575f5ffd5b506104db6104d63660046150d4565b611775565b60405161020a9190615211565b3480156104f3575f5ffd5b506102a7610502366004615220565b6118fc565b348015610512575f5ffd5b5061025361052136600461525a565b611916565b348015610531575f5ffd5b50610545610540366004614bbe565b611e17565b60405161020a91905f60e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156105a5575f5ffd5b506102a76105b4366004615287565b611f14565b3480156105c4575f5ffd5b506102a7611f25565b3480156105d8575f5ffd5b50610545611f43565b3480156105ec575f5ffd5b506102536105fb366004614be9565b611ff0565b34801561060b575f5ffd5b506102e3612140565b5f61061e826121c1565b8061063957506001600160e01b0319821663da40804f60e01b145b92915050565b606060fb805461064e906152cc565b80601f016020809104026020016040519081016040528092919081815260200182805461067a906152cc565b80156106c55780601f1061069c576101008083540402835291602001916106c5565b820191905f5260205f20905b8154815290600101906020018083116106a857829003601f168201915b5050505050905090565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016107b2959493929190615319565b5f6040518083038186803b1580156107c8575f5ffd5b505afa1580156107da573d5f5f3e3d5ffd5b50505050825f036107fe576040516364ba211360e11b815260040160405180910390fd5b5f83815261012d602052604081205461ffff1690036108305760405163c4c1a0c560e01b815260040160405180910390fd5b5f83815261012d602052604080822080546001600160c01b03191690555184917fda8c8883e1b3ead63d3ef64674f8fc499048554f6fa36776af0ab41d2f99834691a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108c95760405162461bcd60e51b81526004016108c09061534c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109115f516020615b245f395f51905f52546001600160a01b031690565b6001600160a01b0316146109375760405162461bcd60e51b81526004016108c090615398565b610940816121f6565b604080515f8082526020820190925261095b91839190612313565b50565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f516020615b445f395f51905f527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0d91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b8152600401610a41959493929190615319565b5f6040518083038186803b158015610a57575f5ffd5b505afa158015610a69573d5f5f3e3d5ffd5b50505050610a7561247d565b5050565b5f610a826124cf565b7f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2391906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b8152600401610b5494939291906153e4565b5f6040518083038186803b158015610b6a575f5ffd5b505afa158015610b7c573d5f5f3e3d5ffd5b50505050610b918b8b8b8b8b8b8b8b8b612517565b610bb18c8c8c8c8c33610ba38e6126fb565b610bac8e61270a565b61279d565b519c9b505050505050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0a5760405162461bcd60e51b81526004016108c09061534c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c525f516020615b245f395f51905f52546001600160a01b031690565b6001600160a01b031614610c785760405162461bcd60e51b81526004016108c090615398565b610c81826121f6565b610a7582826001612313565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d2c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108c0565b505f516020615b245f395f51905f5290565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b8152600401610e21959493929190615319565b5f6040518083038186803b158015610e37575f5ffd5b505afa158015610e49573d5f5f3e3d5ffd5b50505050835f03610e6d576040516364ba211360e11b815260040160405180910390fd5b604051806101400160405280610e85855f0135612d7b565b61ffff168152602001610e9b8560200135612d7b565b61ffff168152602001610eb18560400135612d7b565b61ffff168152602001610ec78560600135612d7b565b61ffff168152602001610edd8560800135612d7b565b61ffff168152602001610ef38560a00135612d7b565b61ffff168152602001610f098560c00135612d7b565b61ffff908116825263ffffffff6020808401829052604080850183905260609485018490525f8a815261012d835281902086518154938801519288015196880151608089015160a08a015160c08b015160e08c01516101008d0151610120909d01518b16600160b01b0261ffff60b01b199d8b16600160901b029d909d1665ffffffffffff60901b1991909a16600160701b0263ffffffff60701b19928c16600160601b029290921665ffffffffffff60601b19938c16600160501b0261ffff60501b19958d16600160401b029590951663ffffffff60401b19968d16600160301b0261ffff60301b199e8e16600160201b029e909e1667ffffffff00000000199a8e16620100000263ffffffff19909c1698909d169790971799909917979097169990991799909917919091169190911717959095169190911792909217919091161791909117815561105c90612d94565b6040805184358152602080860135908201528482013581830152606080860135908201526080808601359082015260a0808601359082015260c08086013590820152905185917f1f02d2d352ddbf27121545f4d4730d7656c038f9ce75851410c9ef6982728975919081900360e00190a250505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461111c5760405163799e780f60e01b815260040160405180910390fd5b8060fd5f82825461112d9190615422565b909155505050565b5f54610100900460ff161580801561115357505f54600160ff909116105b8061116c5750303b15801561116c57505f5460ff166001145b6111cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108c0565b5f805460ff1916600117905580156111f0575f805461ff0019166101001790555b6111ff8888888888888861318e565b8015611244575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b5f6112576124cf565b7f90fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f891906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161132994939291906153e4565b5f6040518083038186803b15801561133f575f5ffd5b505afa158015611351573d5f5f3e3d5ffd5b505050506113668c8c8c8c8b8b8b8b8b6131cb565b610bb18c8c8c8c8b8b338f6132f7565b7f92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061141791906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161144894939291906153e4565b5f6040518083038186803b15801561145e575f5ffd5b505afa158015611470573d5f5f3e3d5ffd5b5050505061147c6124cf565b604051631e9c0acf60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637a702b3c906114ca9086908690600401615501565b5f604051808303815f87803b1580156114e1575f5ffd5b505af11580156114f3573d5f5f3e3d5ffd5b50505050505050565b5f6115056124cf565b7f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a691906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b81526004016115d794939291906153e4565b5f6040518083038186803b1580156115ed575f5ffd5b505afa1580156115ff573d5f5f3e3d5ffd5b505050506116148b8b8b8b8b8b8b8b8b6131cb565b610bb18c8c8c8c8c336116268e6126fb565b610bac8e611e17565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50417f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d091906152fe565b6001600160a01b0316635ff57d2030833360016040518563ffffffff1660e01b815260040161170294939291906153e4565b5f6040518083038186803b158015611718575f5ffd5b505afa15801561172a573d5f5f3e3d5ffd5b5050505061095b61335f565b60fc545f90611753908290600160901b900463ffffffff1661339c565b905090565b5f61176d84848442611768611f43565b61342a565b949350505050565b61177d614ab4565b6117856124cf565b7f90fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611802573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182691906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161185794939291906153e4565b5f6040518083038186803b15801561186d575f5ffd5b505afa15801561187f573d5f5f3e3d5ffd5b505050506118948c8c8c8c8b8b8b8b8b612517565b6118b48c8c8c8c338d6118a68e6126fb565b6118af8e61270a565b613446565b8051604051898152919350907f3e4224c37ba48f27f735eecea98c4d71568b9825d0006b6e128aa73695e35f709060200160405180910390a2509a9950505050505050505050565b5f61190d8585854261176887611e17565b95945050505050565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016119f9959493929190615319565b5f6040518083038186803b158015611a0f575f5ffd5b505afa158015611a21573d5f5f3e3d5ffd5b505f9250611a2d915050565b846009811115611a3f57611a3f61551e565b03611a6857611a4d83612d7b565b60fc805461ffff191661ffff92909216919091179055611dda565b6001846009811115611a7c57611a7c61551e565b03611aae57611a8a83612d7b565b60fc805461ffff92909216620100000263ffff000019909216919091179055611dda565b6002846009811115611ac257611ac261551e565b03611af757611ad083612d7b565b60fc805461ffff92909216600160201b0265ffff0000000019909216919091179055611dda565b6003846009811115611b0b57611b0b61551e565b03611b3f57611b1983612d7b565b60fc805461ffff92909216600160301b0261ffff60301b19909216919091179055611dda565b6004846009811115611b5357611b5361551e565b03611b8c57611b6183612d7b565b60fc805461ffff92909216600160401b0269ffff000000000000000019909216919091179055611dda565b6005846009811115611ba057611ba061551e565b03611bd457611bae83612d7b565b60fc805461ffff92909216600160501b0261ffff60501b19909216919091179055611dda565b6006846009811115611be857611be861551e565b03611c1c57611bf683612d7b565b60fc805461ffff92909216600160601b0261ffff60601b19909216919091179055611dda565b6007846009811115611c3057611c3061551e565b03611c6a57611c4060028461395f565b60fc805463ffffffff92909216600160701b0263ffffffff60701b19909216919091179055611dda565b6008846009811115611c7e57611c7e61551e565b03611d965760fd54831015611cef5760405162461bcd60e51b815260206004820152603160248201527f43616e277420736574206578706f737572654c696d6974206c657373207468616044820152706e20616374697665206578706f7375726560781b60648201526084016108c0565b611cf7611736565b83111580611d165750611d165f516020615b445f395f51905f526139ef565b611d625760405162461bcd60e51b815260206004820152601d60248201527f496e637265617365207265717569726573204c4556454c315f524f4c4500000060448201526064016108c0565b611d6c5f8461395f565b60fc805463ffffffff92909216600160901b0263ffffffff60901b19909216919091179055611dda565b6009846009811115611daa57611daa61551e565b03611dda57611db883613ae1565b60fc805461ffff92909216600160b01b0261ffff60b01b199092169190911790555b611e11846009811115611def57611def61551e565b611dfa906008615532565b602d811115611e0b57611e0b61551e565b84613b47565b50505050565b611e1f614b2c565b8115611f07575f82815261012d602052604081208054909161ffff9091169003611e5c5760405163c4c1a0c560e01b815260040160405180910390fd5b6040805161014081018252825461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c083015263ffffffff600160701b8204811660e0840152600160901b820416610100830152600160b01b9004909116610120820152611f009061270a565b9392505050565b610639611f43565b919050565b5f61190d858585426117688761270a565b60fc545f9061175390600290600160701b900463ffffffff1661339c565b611f4b614b2c565b604080516101408101825260fc5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c083015263ffffffff600160701b8204811660e0840152600160901b820416610100830152600160b01b90049091166101208201526117539061270a565b7f0df0a8869cf58168a14cd7ac426ff1b8c6ff5d5c800c6f44803f3431dcb3bad17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209191906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b81526004016120c294939291906153e4565b5f6040518083038186803b1580156120d8575f5ffd5b505afa1580156120ea573d5f5f3e3d5ffd5b5050506001600160a01b038316905061211657604051634d1c286960e11b815260040160405180910390fd5b60fe80546001600160a01b0319166001600160a01b038416908117909155610a7590601290613b47565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175391906152fe565b5f6001600160e01b031982166301ffc9a760e01b148061063957506001600160e01b03198216634d15eb0360e01b1492915050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f516020615b445f395f51905f527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015612281573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a591906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016122d9959493929190615319565b5f6040518083038186803b1580156122ef575f5ffd5b505afa158015612301573d5f5f3e3d5ffd5b5050505061230e83613b98565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123465761230e83613c56565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123a0575060408051601f3d908101601f1916820190925261239d91810190615545565b60015b6124035760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108c0565b5f516020615b245f395f51905f5281146124715760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108c0565b5061230e838383613cf1565b612485613d15565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60975460ff16156125155760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108c0565b565b428164ffffffffff16101561253f57604051638727a7f960e01b815260040160405180910390fd5b5f6125e1308b8b8b8b8b6125b58c5f60908260c0015161ffff16901b60a08360a0015161ffff16901b60b0846080015161ffff16901b60c0856060015161ffff16901b60d0866040015161ffff16901b60e0876020015161ffff16901b60f0885f015161ffff16901b1717171717179050919050565b896040516020016125cd98979695949392919061555c565b604051602081830303815290604052613d5e565b90505f6125ef828686613d98565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267191906152fe565b6001600160a01b0316635ff57d20307ff5d8f7a4041cf31e35e40569643a02f20f7706179aaa0b7764c077c3a607b275845f6040518563ffffffff1660e01b81526004016126c294939291906153e4565b5f6040518083038186803b1580156126d8575f5ffd5b505afa1580156126ea573d5f5f3e3d5ffd5b505050505050505050505050505050565b5f610639600160601b836155d4565b612712614b2c565b6040518060e00160405280612729845f0151613dbc565b815260200161273b8460200151613dbc565b815260200161274d8460400151613dbc565b815260200161275f8460600151613dbc565b81526020016127718460800151613dbc565b81526020016127838460a00151613dbc565b81526020016127958460c00151613dbc565b905292915050565b6127a5614ab4565b5f1987036127ce576127cb8887876127c56101a08e016101808f016155e7565b8661342a565b96505b87871061281d5760405162461bcd60e51b815260206004820181905260248201527f5072656d69756d206d757374206265206c657373207468616e207061796f757460448201526064016108c0565b64ffffffffff42166128376101c08b016101a08c016155e7565b64ffffffffff16116128835760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b60448201526064016108c0565b6128956101c08a016101a08b016155e7565b64ffffffffff168564ffffffffff16101580156128b6575088602001358810155b80156128c6575088604001358710155b6129385760405162461bcd60e51b815260206004820152603b60248201527f506f6c696379207265706c6163656d656e74206d75737420626520677265617460448201527f6572206f7220657175616c207468616e206f6c6420706f6c696379000000000060648201526084016108c0565b60fc54600160b01b900461ffff16610e1061295b6101a08c016101808d016155e7565b6129659088615600565b61296f919061561d565b64ffffffffff16106129c35760405162461bcd60e51b815260206004820152601b60248201527f506f6c6963792065786365656473206d6178206475726174696f6e000000000060448201526064016108c0565b6129d160408a013588615422565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5191906152fe565b604051636eb1769f60e11b81526001600160a01b0387811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612abf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae39190615545565b1015612b015760405162461bcd60e51b81526004016108c090615646565b6001600160a01b038416331480612c215750612b2160408a013588615422565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906152fe565b6001600160a01b031663dd62ed3e86336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612bfa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1e9190615545565b10155b612c3d5760405162461bcd60e51b81526004016108c090615693565b612c45611f25565b881115612c645760405162461bcd60e51b81526004016108c0906156e2565b612c863083898b8a8a8f610180016020810190612c8191906155e7565b613dd1565b905088602001358160200151612c9c9190615422565b60fd5f828254612cac9190615532565b90915550612cba9050611736565b60fd541115612cdb5760405162461bcd60e51b81526004016108c090615734565b604051631f6be0d760e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ed7c1ae90612d2d908c90859089908990600401615777565b6020604051808303815f875af1158015612d49573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6d9190615545565b815298975050505050505050565b5f610639612d8f655af3107a4000846157c4565b613ae1565b80546127106201000090910461ffff161115612dfe5760405162461bcd60e51b815260206004820152602360248201527f56616c69646174696f6e3a206a72436f6c6c526174696f206d757374206265206044820152623c3d3160e81b60648201526084016108c0565b8054612710600160201b90910461ffff1611801590612e2857508054600160201b900461ffff1615155b612e7e5760405162461bcd60e51b815260206004820152602160248201527f56616c69646174696f6e3a20636f6c6c526174696f206d757374206265203c3d6044820152603160f81b60648201526084016108c0565b805461ffff6201000082048116600160201b909204161015612eee5760405162461bcd60e51b8152602060048201526024808201527f56616c69646174696f6e3a20636f6c6c526174696f203e3d206a72436f6c6c526044820152636174696f60e01b60648201526084016108c0565b8054619c4061ffff90911611801590612f105750805461138861ffff90911610155b612f5c5760405162461bcd60e51b815260206004820181905260248201527f56616c69646174696f6e3a206d6f63206d757374206265205b302e352c20345d60448201526064016108c0565b8054612710600160301b90910461ffff161115612fc75760405162461bcd60e51b8152602060048201526024808201527f56616c69646174696f6e3a20656e7375726f5070466565206d757374206265206044820152633c3d203160e01b60648201526084016108c0565b8054612710600160401b90910461ffff1611156130345760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a20656e7375726f436f63466565206d757374206265604482015264203c3d203160d81b60648201526084016108c0565b8054612710600160601b90910461ffff1611156130a15760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a207372526f63206d757374206265203c3d20312028604482015264313030252960d81b60648201526084016108c0565b8054612710600160501b90910461ffff16111561310e5760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a206a72526f63206d757374206265203c3d20312028604482015264313030252960d81b60648201526084016108c0565b8054600160901b900463ffffffff161580159061313857508054600160701b900463ffffffff1615155b61095b5760405162461bcd60e51b815260206004820152602160248201527f4578706f7375726520616e64204d61785061796f7574206d757374206265203e6044820152600360fc1b60648201526084016108c0565b5f54610100900460ff166131b45760405162461bcd60e51b81526004016108c0906157d7565b6131bc613f41565b6114f387878787878787613f77565b428164ffffffffff1610156131f357604051638727a7f960e01b815260040160405180910390fd5b5f613216308b8b8b8b8b8b896040516020016125cd98979695949392919061555c565b90505f613224828686613d98565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613282573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132a691906152fe565b6001600160a01b0316635ff57d20307fc6823861ee2bb2198ce6b1fd6faf4c8f44f745bc804aca4a762f67e0d507fd8a845f6040518563ffffffff1660e01b81526004016126c294939291906153e4565b6132ff614ab4565b61331a8989898987876133118c6126fb565b6118af8c611e17565b8051604051878152919250907f3e4224c37ba48f27f735eecea98c4d71568b9825d0006b6e128aa73695e35f709060200160405180910390a298975050505050505050565b6133676124cf565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124b23390565b5f826133a6612140565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134059190615822565b61340f9190615842565b61341a90600a615936565b611f009063ffffffff8416615944565b5f6134388287878787614178565b60e001519695505050505050565b61344e614ab4565b4260018901613467576134648a8989848761342a565b98505b8989106134b65760405162461bcd60e51b815260206004820181905260248201527f5072656d69756d206d757374206265206c657373207468616e207061796f757460448201526064016108c0565b8064ffffffffff168764ffffffffff16116135135760405162461bcd60e51b815260206004820181905260248201527f45787069726174696f6e206d75737420626520696e207468652066757475726560448201526064016108c0565b60fc54600160b01b900461ffff16610e1061352e838a615600565b613538919061561d565b64ffffffffff161061358c5760405162461bcd60e51b815260206004820152601b60248201527f506f6c6963792065786365656473206d6178206475726174696f6e000000000060448201526064016108c0565b6001600160a01b0385166135e25760405162461bcd60e51b815260206004820152601e60248201527f437573746f6d65722063616e2774206265207a65726f2061646472657373000060448201526064016108c0565b887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366391906152fe565b604051636eb1769f60e11b81526001600160a01b0389811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156136d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f59190615545565b10156137135760405162461bcd60e51b81526004016108c090615646565b6001600160a01b0386163314806138265750887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613782573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137a691906152fe565b6001600160a01b031663dd62ed3e88336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156137ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138239190615545565b10155b6138425760405162461bcd60e51b81526004016108c090615693565b61384a611f25565b8a11156138695760405162461bcd60e51b81526004016108c0906156e2565b61387830848b8d8c8c87613dd1565b9150816020015160fd5f82825461388f9190615532565b9091555061389d9050611736565b60fd5411156138be5760405162461bcd60e51b81526004016108c090615734565b604051636769a76f60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636769a76f906139109085908a908a908a9060040161595b565b6020604051808303815f875af115801561392c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139509190615545565b82525098975050505050505050565b5f611f008361396c612140565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cb9190615822565b6139d59190615842565b6139e090600a615936565b6139ea90846157c4565b61436b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7091906152fe565b6001600160a01b031663b3efcbd230843360016040518563ffffffff1660e01b8152600401613aa294939291906153e4565b602060405180830381865afa158015613abd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063991906159a2565b5f61ffff821115613b435760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016108c0565b5090565b613b4f6143cf565b81602d811115613b6157613b6161551e565b6040518281527f7bc647fe5043209e2019aa3503b79c1b0dd83eb61c56013d373a7584ff6bfb139060200160405180910390a25050565b613ba18161442c565b5f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c2f91906152fe565b6001600160a01b031614610a755760405163050f87e160e21b815260040160405180910390fd5b6001600160a01b0381163b613cc35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108c0565b5f516020615b245f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613cfa836144dd565b5f82511180613d065750805b1561230e57611e11838361451c565b60975460ff166125155760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108c0565b5f613d698251614541565b82604051602001613d7b9291906159d8565b604051602081830303815290604052805190602001209050919050565b5f5f5f613da68686866145d1565b91509150613db38161460a565b50949350505050565b5f610639655af3107a400061ffff8416615944565b613dd9614ab4565b84861115613e345760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b60648201526084016108c0565b613e3c614ab4565b6001600160a01b038916610160820152604081018790526020810186905260a0810185905264ffffffffff80841661018083015284166101a08201525f613e868988888888614178565b805160c0840152602081015160608085019190915260408201516080808601919091529082015161012085015281015161014084015260a081015160e080850191909152810151909150881015613f1f5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d0000000000000060448201526064016108c0565b60e0810151613f2e9089615422565b6101008301525098975050505050505050565b5f54610100900460ff16613f675760405162461bcd60e51b81526004016108c0906157d7565b613f6f614753565b612515614779565b5f54610100900460ff16613f9d5760405162461bcd60e51b81526004016108c0906157d7565b60fb613fa98882615a5d565b50604080516101408101825261271081525f6020820152908101613fcc88612d7b565b61ffff168152602001613fde87612d7b565b61ffff1681525f602082018190526040820152606001613ffd86612d7b565b61ffff16815260200161401160028661395f565b63ffffffff1681526020016140265f8561395f565b63ffffffff9081168252612238602092830152825160fc80549385015160408601516060870151608088015160a089015160c08a015160e08b01516101008c0151610120909c015161ffff998a1663ffffffff19909c169b909b1762010000978a16979097029690961767ffffffff000000001916600160201b9589169590950261ffff60301b191694909417600160301b938816939093029290921763ffffffff60401b1916600160401b9187169190910261ffff60501b191617600160501b918616919091021765ffffffffffff60601b1916600160601b9185169190910263ffffffff60701b191617600160701b918516919091021765ffffffffffff60901b1916600160901b959093169490940261ffff60b01b191691909117600160b01b91909216021790555f60fd5560fe80546001600160a01b0319166001600160a01b0383161790556114f36143cf565b6141b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516141d0906141c99086906147a7565b86906147a7565b815260208601516141e29086906147a7565b602082018190528151101561420c578051602082018051614204908390615422565b905250614213565b5f60208201525b60408601516142239086906147a7565b6040820152602081015181516142399190615532565b8160400151111561426e57602081015181516142559190615532565b816040018181516142669190615422565b905250614275565b5f60408201525b6142b26301e133806142878486615600565b64ffffffffff168860a0015161429d9190615944565b6142a791906157c4565b6020830151906147a7565b60608201526142f46301e133806142c98486615600565b64ffffffffff168860c001516142df9190615944565b6142e991906157c4565b6040830151906147a7565b6080820181905260608201515f9161430b91615532565b90506143248760800151826147a790919063ffffffff16565b60608801518351614334916147a7565b61433e9190615532565b60a083018190528251829161435291615532565b61435c9190615532565b60e08301525095945050505050565b5f63ffffffff821115613b435760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016108c0565b60fd546143da611736565b10156143f957604051631adcca4560e11b815260040160405180910390fd5b60fe546001600160a01b031661442257604051634d1c286960e11b815260040160405180910390fd5b61251560fc612d94565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015614492573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144b691906152fe565b6001600160a01b03161461095b5760405163d2b3d33f60e01b815260040160405180910390fd5b6144e681613c56565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060611f008383604051806060016040528060278152602001615b64602791396147dd565b60605f61454d83614851565b60010190505f8167ffffffffffffffff81111561456c5761456c614c2f565b6040519080825280601f01601f191660200182016040528015614596576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846145a057509392505050565b5f806001600160ff1b038316816145ed60ff86901c601b615532565b90506145fb87828885614928565b9350935050505b935093915050565b5f81600481111561461d5761461d61551e565b036146255750565b60018160048111156146395761463961551e565b036146865760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108c0565b600281600481111561469a5761469a61551e565b036146e75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108c0565b60038160048111156146fb576146fb61551e565b0361095b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108c0565b5f54610100900460ff166125155760405162461bcd60e51b81526004016108c0906157d7565b5f54610100900460ff1661479f5760405162461bcd60e51b81526004016108c0906157d7565b6125156149e5565b5f81156706f05b59d3b2000019839004841115176147c3575f5ffd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b60605f5f856001600160a01b0316856040516147f99190615b18565b5f60405180830381855af49150503d805f8114614831576040519150601f19603f3d011682016040523d82523d5f602084013e614836565b606091505b509150915061484786838387614a17565b9695505050505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061488f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148bb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148d957662386f26fc10000830492506010015b6305f5e10083106148f1576305f5e100830492506008015b612710831061490557612710830492506004015b60648310614917576064830492506002015b600a83106106395760010192915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561495d57505f905060036149dc565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156149ae573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166149d6575f600192509250506149dc565b91505f90505b94509492505050565b5f54610100900460ff16614a0b5760405162461bcd60e51b81526004016108c0906157d7565b6097805460ff19169055565b60608315614a855782515f03614a7e576001600160a01b0385163b614a7e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c0565b508161176d565b61176d8383815115614a9a5781518083602001fd5b8060405162461bcd60e51b81526004016108c09190614b89565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215614b72575f5ffd5b81356001600160e01b031981168114611f00575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215614bce575f5ffd5b5035919050565b6001600160a01b038116811461095b575f5ffd5b5f60208284031215614bf9575f5ffd5b8135611f0081614bd5565b5f6101c08284031215614c15575f5ffd5b50919050565b803564ffffffffff81168114611f0f575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051610140810167ffffffffffffffff81118282101715614c6757614c67614c2f565b60405290565b803561ffff81168114611f0f575f5ffd5b803563ffffffff81168114611f0f575f5ffd5b5f6101408284031215614ca2575f5ffd5b614caa614c43565b9050614cb582614c6d565b8152614cc360208301614c6d565b6020820152614cd460408301614c6d565b6040820152614ce560608301614c6d565b6060820152614cf660808301614c6d565b6080820152614d0760a08301614c6d565b60a0820152614d1860c08301614c6d565b60c0820152614d2960e08301614c7e565b60e0820152614d3b6101008301614c7e565b610100820152614d4e6101208301614c6d565b61012082015292915050565b5f5f5f5f5f5f5f5f5f5f6104008b8d031215614d74575f5ffd5b614d7e8c8c614c04565b99506101c08b013598506101e08b013597506102008b01359650614da56102208c01614c1b565b95506102408b01359450614dbd8c6102608d01614c91565b93506103a08b013592506103c08b01359150614ddc6103e08c01614c1b565b90509295989b9194979a5092959850565b5f5f67ffffffffffffffff841115614e0757614e07614c2f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614e3657614e36614c2f565b604052838152905080828401851015614e4d575f5ffd5b838360208301375f60208583010152509392505050565b5f5f60408385031215614e75575f5ffd5b8235614e8081614bd5565b9150602083013567ffffffffffffffff811115614e9b575f5ffd5b8301601f81018513614eab575f5ffd5b614eba85823560208401614ded565b9150509250929050565b5f5f828403610100811215614ed7575f5ffd5b8335925060e0601f1982011215614eec575f5ffd5b506020830190509250929050565b5f5f5f5f5f5f5f60e0888a031215614f10575f5ffd5b873567ffffffffffffffff811115614f26575f5ffd5b8801601f81018a13614f36575f5ffd5b614f458a823560208401614ded565b9750506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614f7981614bd5565b8091505092959891949750929550565b5f5f5f5f5f5f5f5f5f5f6101408b8d031215614fa3575f5ffd5b8a35995060208b0135985060408b01359750614fc160608c01614c1b565b965060808b0135614fd181614bd5565b955060a08b0135945060c08b0135935060e08b013592506101008b01359150614ddc6101208c01614c1b565b5f5f6101e0838503121561500f575f5ffd5b6150198484614c04565b946101c0939093013593505050565b5f5f5f5f5f5f5f5f5f5f6102e08b8d031215615042575f5ffd5b61504c8c8c614c04565b99506101c08b013598506101e08b013597506102008b013596506150736102208c01614c1b565b95506102408b013594506102608b013593506102808b013592506102a08b01359150614ddc6102c08c01614c1b565b5f5f5f606084860312156150b4575f5ffd5b83359250602084013591506150cb60408501614c1b565b90509250925092565b5f5f5f5f5f5f5f5f5f5f6102608b8d0312156150ee575f5ffd5b8a35995060208b0135985060408b0135975061510c60608c01614c1b565b965060808b013561511c81614bd5565b955060a08b013594506151328c60c08d01614c91565b93506102008b013592506102208b01359150614ddc6102408c01614c1b565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516151db6101608401826001600160a01b03169052565b506101808101516151f661018084018264ffffffffff169052565b506101a081015161230e6101a084018264ffffffffff169052565b6101c081016106398284615151565b5f5f5f5f60808587031215615233575f5ffd5b843593506020850135925061524a60408601614c1b565b9396929550929360600135925050565b5f5f6040838503121561526b575f5ffd5b8235600a8110615279575f5ffd5b946020939093013593505050565b5f5f5f5f6101a0858703121561529b575f5ffd5b84359350602085013592506152b260408601614c1b565b91506152c18660608701614c91565b905092959194509250565b600181811c908216806152e057607f821691505b602082108103614c1557634e487b7160e01b5f52602260045260245ffd5b5f6020828403121561530e575f5ffd5b8151611f0081614bd5565b6001600160a01b039586168152602081019490945260408401929092529092166060820152901515608082015260a00190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106395761063961540e565b8035611f0f81614bd5565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e080820135908301526101008082013590830152610120808201359083015261014080820135908301526154b86101608201615435565b6001600160a01b03166101608301526154d46101808201614c1b565b64ffffffffff166101808301526154ee6101a08201614c1b565b64ffffffffff81166101a0840152505050565b6101e081016155108285615440565b826101c08301529392505050565b634e487b7160e01b5f52602160045260245ffd5b808201808211156106395761063961540e565b5f60208284031215615555575f5ffd5b5051919050565b60609890981b6bffffffffffffffffffffffff1916885260148801969096526034870194909452605486019290925260d890811b6001600160d81b031990811660748701526079860192909252609985019290925291901b1660b982015260be0190565b634e487b7160e01b5f52601260045260245ffd5b5f826155e2576155e26155c0565b500690565b5f602082840312156155f7575f5ffd5b611f0082614c1b565b64ffffffffff82811682821603908111156106395761063961540e565b5f64ffffffffff831680615633576156336155c0565b8064ffffffffff84160491505092915050565b6020808252602d908201527f596f75206d75737420616c6c6f7720454e5355524f20746f207472616e73666560408201526c7220746865207072656d69756d60981b606082015260800190565b6020808252602f908201527f5061796572206d75737420616c6c6f772063616c6c657220746f207472616e7360408201526e66657220746865207072656d69756d60881b606082015260800190565b60208082526032908201527f5269736b4d6f64756c653a205061796f7574206973206d6f7265207468616e206040820152716d6178696d756d2070657220706f6c69637960701b606082015260800190565b60208082526023908201527f5269736b4d6f64756c653a204578706f73757265206c696d697420657863656560408201526219195960ea1b606082015260800190565b6103c081016157868287615440565b6157946101c0830186615151565b6001600160a01b03939093166103808201526bffffffffffffffffffffffff919091166103a09091015292915050565b5f826157d2576157d26155c0565b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215615832575f5ffd5b815160ff81168114611f00575f5ffd5b60ff82811682821603908111156106395761063961540e565b6001815b60018411156146025780850481111561587a5761587a61540e565b600184161561588857908102905b60019390931c92800261585f565b5f826158a457506001610639565b816158b057505f610639565b81600181146158c657600281146158d0576158ec565b6001915050610639565b60ff8411156158e1576158e161540e565b50506001821b610639565b5060208310610133831016604e8410600b841016171561590f575081810a610639565b61591b5f19848461585b565b805f190482111561592e5761592e61540e565b029392505050565b5f611f0060ff841683615896565b80820281158282048414176106395761063961540e565b610220810161596a8287615151565b6001600160a01b039485166101c0830152929093166101e08401526bffffffffffffffffffffffff1661020090920191909152919050565b5f602082840312156159b2575f5ffd5b81518015158114611f00575f5ffd5b5f81518060208401855e5f93019283525090919050565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525f61176d615a0c601a8401866159c1565b846159c1565b601f82111561230e57805f5260205f20601f840160051c81016020851015615a375750805b601f840160051c820191505b81811015615a56575f8155600101615a43565b5050505050565b815167ffffffffffffffff811115615a7757615a77614c2f565b615a8b81615a8584546152cc565b84615a12565b6020601f821160018114615abd575f8315615aa65750848201515b5f19600385901b1c1916600184901b178455615a56565b5f84815260208120601f198516915b82811015615aec5787850151825560209485019460019092019101615acc565b5084821015615b0957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f611f0082846159c156fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220833bf365115b989c34479d926a84a113fdc952fe9a5442a8c9fb00b658d1b5eb64736f6c634300081c0033",
  "deployedBytecode": "0x6080604052600436106101db575f3560e01c8063766dbc56116100fd578063b9b28f2a11610092578063cfd4c60611610062578063cfd4c606146105b9578063cff0ab96146105cd578063deaa59df146105e1578063e5a6b10f14610600575f5ffd5b8063b9b28f2a146104e8578063c1cca2b314610507578063ceddac6f14610526578063cf19171e1461059a575f5ffd5b80638456cb59116100cd5780638456cb591461047557806385272a6e146104895780638bac3a241461049d5780639014d171146104bc575f5ffd5b8063766dbc56146104045780637a702b3c146104235780637ff8bf251461044257806382ff9c8c14610456575f5ffd5b8063521eb273116101735780636a448ef1116101435780636a448ef1146103755780636db5c8fd146103945780636f0dbe6f146103b357806373a952e8146103d2575f5ffd5b8063521eb2731461030e57806352d1902d1461032b578063571e8bcc1461033f5780635c975abb1461035e575f5ffd5b80633f4ba83a116101ae5780633f4ba83a146102745780633f961587146102885780634d15eb03146102b55780634f1ef286146102fb575f5ffd5b806301ffc9a7146101df57806306fdde031461021357806318e26bb9146102345780633659cfe614610255575b5f5ffd5b3480156101ea575f5ffd5b506101fe6101f9366004614b62565b610614565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b5061022761063f565b60405161020a9190614b89565b34801561023f575f5ffd5b5061025361024e366004614bbe565b6106cf565b005b348015610260575f5ffd5b5061025361026f366004614be9565b610878565b34801561027f575f5ffd5b5061025361095e565b348015610293575f5ffd5b506102a76102a2366004614d5a565b610a79565b60405190815260200161020a565b3480156102c0575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161020a565b610253610309366004614e64565b610bc2565b348015610319575f5ffd5b5060fe546001600160a01b03166102e3565b348015610336575f5ffd5b506102a7610c8d565b34801561034a575f5ffd5b50610253610359366004614ec4565b610d3e565b348015610369575f5ffd5b5060975460ff166101fe565b348015610380575f5ffd5b5061025361038f366004614bbe565b6110d3565b34801561039f575f5ffd5b5060fc54600160b01b900461ffff166102a7565b3480156103be575f5ffd5b506102536103cd366004614efa565b611135565b3480156103dd575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102e3565b34801561040f575f5ffd5b506102a761041e366004614f89565b61124e565b34801561042e575f5ffd5b5061025361043d366004614ffd565b611376565b34801561044d575f5ffd5b5060fd546102a7565b348015610461575f5ffd5b506102a7610470366004615028565b6114fc565b348015610480575f5ffd5b5061025361162f565b348015610494575f5ffd5b506102a7611736565b3480156104a8575f5ffd5b506102a76104b73660046150a2565b611758565b3480156104c7575f5ffd5b506104db6104d63660046150d4565b611775565b60405161020a9190615211565b3480156104f3575f5ffd5b506102a7610502366004615220565b6118fc565b348015610512575f5ffd5b5061025361052136600461525a565b611916565b348015610531575f5ffd5b50610545610540366004614bbe565b611e17565b60405161020a91905f60e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156105a5575f5ffd5b506102a76105b4366004615287565b611f14565b3480156105c4575f5ffd5b506102a7611f25565b3480156105d8575f5ffd5b50610545611f43565b3480156105ec575f5ffd5b506102536105fb366004614be9565b611ff0565b34801561060b575f5ffd5b506102e3612140565b5f61061e826121c1565b8061063957506001600160e01b0319821663da40804f60e01b145b92915050565b606060fb805461064e906152cc565b80601f016020809104026020016040519081016040528092919081815260200182805461067a906152cc565b80156106c55780601f1061069c576101008083540402835291602001916106c5565b820191905f5260205f20905b8154815290600101906020018083116106a857829003601f168201915b5050505050905090565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077e91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016107b2959493929190615319565b5f6040518083038186803b1580156107c8575f5ffd5b505afa1580156107da573d5f5f3e3d5ffd5b50505050825f036107fe576040516364ba211360e11b815260040160405180910390fd5b5f83815261012d602052604081205461ffff1690036108305760405163c4c1a0c560e01b815260040160405180910390fd5b5f83815261012d602052604080822080546001600160c01b03191690555184917fda8c8883e1b3ead63d3ef64674f8fc499048554f6fa36776af0ab41d2f99834691a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108c95760405162461bcd60e51b81526004016108c09061534c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109115f516020615b245f395f51905f52546001600160a01b031690565b6001600160a01b0316146109375760405162461bcd60e51b81526004016108c090615398565b610940816121f6565b604080515f8082526020820190925261095b91839190612313565b50565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f516020615b445f395f51905f527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0d91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b8152600401610a41959493929190615319565b5f6040518083038186803b158015610a57575f5ffd5b505afa158015610a69573d5f5f3e3d5ffd5b50505050610a7561247d565b5050565b5f610a826124cf565b7f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2391906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b8152600401610b5494939291906153e4565b5f6040518083038186803b158015610b6a575f5ffd5b505afa158015610b7c573d5f5f3e3d5ffd5b50505050610b918b8b8b8b8b8b8b8b8b612517565b610bb18c8c8c8c8c33610ba38e6126fb565b610bac8e61270a565b61279d565b519c9b505050505050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0a5760405162461bcd60e51b81526004016108c09061534c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c525f516020615b245f395f51905f52546001600160a01b031690565b6001600160a01b031614610c785760405162461bcd60e51b81526004016108c090615398565b610c81826121f6565b610a7582826001612313565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d2c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108c0565b505f516020615b245f395f51905f5290565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b8152600401610e21959493929190615319565b5f6040518083038186803b158015610e37575f5ffd5b505afa158015610e49573d5f5f3e3d5ffd5b50505050835f03610e6d576040516364ba211360e11b815260040160405180910390fd5b604051806101400160405280610e85855f0135612d7b565b61ffff168152602001610e9b8560200135612d7b565b61ffff168152602001610eb18560400135612d7b565b61ffff168152602001610ec78560600135612d7b565b61ffff168152602001610edd8560800135612d7b565b61ffff168152602001610ef38560a00135612d7b565b61ffff168152602001610f098560c00135612d7b565b61ffff908116825263ffffffff6020808401829052604080850183905260609485018490525f8a815261012d835281902086518154938801519288015196880151608089015160a08a015160c08b015160e08c01516101008d0151610120909d01518b16600160b01b0261ffff60b01b199d8b16600160901b029d909d1665ffffffffffff60901b1991909a16600160701b0263ffffffff60701b19928c16600160601b029290921665ffffffffffff60601b19938c16600160501b0261ffff60501b19958d16600160401b029590951663ffffffff60401b19968d16600160301b0261ffff60301b199e8e16600160201b029e909e1667ffffffff00000000199a8e16620100000263ffffffff19909c1698909d169790971799909917979097169990991799909917919091169190911717959095169190911792909217919091161791909117815561105c90612d94565b6040805184358152602080860135908201528482013581830152606080860135908201526080808601359082015260a0808601359082015260c08086013590820152905185917f1f02d2d352ddbf27121545f4d4730d7656c038f9ce75851410c9ef6982728975919081900360e00190a250505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461111c5760405163799e780f60e01b815260040160405180910390fd5b8060fd5f82825461112d9190615422565b909155505050565b5f54610100900460ff161580801561115357505f54600160ff909116105b8061116c5750303b15801561116c57505f5460ff166001145b6111cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108c0565b5f805460ff1916600117905580156111f0575f805461ff0019166101001790555b6111ff8888888888888861318e565b8015611244575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b5f6112576124cf565b7f90fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f891906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161132994939291906153e4565b5f6040518083038186803b15801561133f575f5ffd5b505afa158015611351573d5f5f3e3d5ffd5b505050506113668c8c8c8c8b8b8b8b8b6131cb565b610bb18c8c8c8c8b8b338f6132f7565b7f92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061141791906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161144894939291906153e4565b5f6040518083038186803b15801561145e575f5ffd5b505afa158015611470573d5f5f3e3d5ffd5b5050505061147c6124cf565b604051631e9c0acf60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637a702b3c906114ca9086908690600401615501565b5f604051808303815f87803b1580156114e1575f5ffd5b505af11580156114f3573d5f5f3e3d5ffd5b50505050505050565b5f6115056124cf565b7f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a691906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b81526004016115d794939291906153e4565b5f6040518083038186803b1580156115ed575f5ffd5b505afa1580156115ff573d5f5f3e3d5ffd5b505050506116148b8b8b8b8b8b8b8b8b6131cb565b610bb18c8c8c8c8c336116268e6126fb565b610bac8e611e17565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50417f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d091906152fe565b6001600160a01b0316635ff57d2030833360016040518563ffffffff1660e01b815260040161170294939291906153e4565b5f6040518083038186803b158015611718575f5ffd5b505afa15801561172a573d5f5f3e3d5ffd5b5050505061095b61335f565b60fc545f90611753908290600160901b900463ffffffff1661339c565b905090565b5f61176d84848442611768611f43565b61342a565b949350505050565b61177d614ab4565b6117856124cf565b7f90fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611802573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182691906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b815260040161185794939291906153e4565b5f6040518083038186803b15801561186d575f5ffd5b505afa15801561187f573d5f5f3e3d5ffd5b505050506118948c8c8c8c8b8b8b8b8b612517565b6118b48c8c8c8c338d6118a68e6126fb565b6118af8e61270a565b613446565b8051604051898152919350907f3e4224c37ba48f27f735eecea98c4d71568b9825d0006b6e128aa73695e35f709060200160405180910390a2509a9950505050505050505050565b5f61190d8585854261176887611e17565b95945050505050565b5f516020615b445f395f51905f527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016119f9959493929190615319565b5f6040518083038186803b158015611a0f575f5ffd5b505afa158015611a21573d5f5f3e3d5ffd5b505f9250611a2d915050565b846009811115611a3f57611a3f61551e565b03611a6857611a4d83612d7b565b60fc805461ffff191661ffff92909216919091179055611dda565b6001846009811115611a7c57611a7c61551e565b03611aae57611a8a83612d7b565b60fc805461ffff92909216620100000263ffff000019909216919091179055611dda565b6002846009811115611ac257611ac261551e565b03611af757611ad083612d7b565b60fc805461ffff92909216600160201b0265ffff0000000019909216919091179055611dda565b6003846009811115611b0b57611b0b61551e565b03611b3f57611b1983612d7b565b60fc805461ffff92909216600160301b0261ffff60301b19909216919091179055611dda565b6004846009811115611b5357611b5361551e565b03611b8c57611b6183612d7b565b60fc805461ffff92909216600160401b0269ffff000000000000000019909216919091179055611dda565b6005846009811115611ba057611ba061551e565b03611bd457611bae83612d7b565b60fc805461ffff92909216600160501b0261ffff60501b19909216919091179055611dda565b6006846009811115611be857611be861551e565b03611c1c57611bf683612d7b565b60fc805461ffff92909216600160601b0261ffff60601b19909216919091179055611dda565b6007846009811115611c3057611c3061551e565b03611c6a57611c4060028461395f565b60fc805463ffffffff92909216600160701b0263ffffffff60701b19909216919091179055611dda565b6008846009811115611c7e57611c7e61551e565b03611d965760fd54831015611cef5760405162461bcd60e51b815260206004820152603160248201527f43616e277420736574206578706f737572654c696d6974206c657373207468616044820152706e20616374697665206578706f7375726560781b60648201526084016108c0565b611cf7611736565b83111580611d165750611d165f516020615b445f395f51905f526139ef565b611d625760405162461bcd60e51b815260206004820152601d60248201527f496e637265617365207265717569726573204c4556454c315f524f4c4500000060448201526064016108c0565b611d6c5f8461395f565b60fc805463ffffffff92909216600160901b0263ffffffff60901b19909216919091179055611dda565b6009846009811115611daa57611daa61551e565b03611dda57611db883613ae1565b60fc805461ffff92909216600160b01b0261ffff60b01b199092169190911790555b611e11846009811115611def57611def61551e565b611dfa906008615532565b602d811115611e0b57611e0b61551e565b84613b47565b50505050565b611e1f614b2c565b8115611f07575f82815261012d602052604081208054909161ffff9091169003611e5c5760405163c4c1a0c560e01b815260040160405180910390fd5b6040805161014081018252825461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c083015263ffffffff600160701b8204811660e0840152600160901b820416610100830152600160b01b9004909116610120820152611f009061270a565b9392505050565b610639611f43565b919050565b5f61190d858585426117688761270a565b60fc545f9061175390600290600160701b900463ffffffff1661339c565b611f4b614b2c565b604080516101408101825260fc5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b8104831660a0830152600160601b8104831660c083015263ffffffff600160701b8204811660e0840152600160901b820416610100830152600160b01b90049091166101208201526117539061270a565b7f0df0a8869cf58168a14cd7ac426ff1b8c6ff5d5c800c6f44803f3431dcb3bad17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209191906152fe565b6001600160a01b0316635ff57d203083335f6040518563ffffffff1660e01b81526004016120c294939291906153e4565b5f6040518083038186803b1580156120d8575f5ffd5b505afa1580156120ea573d5f5f3e3d5ffd5b5050506001600160a01b038316905061211657604051634d1c286960e11b815260040160405180910390fd5b60fe80546001600160a01b0319166001600160a01b038416908117909155610a7590601290613b47565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175391906152fe565b5f6001600160e01b031982166301ffc9a760e01b148061063957506001600160e01b03198216634d15eb0360e01b1492915050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f516020615b445f395f51905f527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015612281573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a591906152fe565b6001600160a01b0316632b1cff1f3084843360016040518663ffffffff1660e01b81526004016122d9959493929190615319565b5f6040518083038186803b1580156122ef575f5ffd5b505afa158015612301573d5f5f3e3d5ffd5b5050505061230e83613b98565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123465761230e83613c56565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156123a0575060408051601f3d908101601f1916820190925261239d91810190615545565b60015b6124035760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108c0565b5f516020615b245f395f51905f5281146124715760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108c0565b5061230e838383613cf1565b612485613d15565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60975460ff16156125155760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108c0565b565b428164ffffffffff16101561253f57604051638727a7f960e01b815260040160405180910390fd5b5f6125e1308b8b8b8b8b6125b58c5f60908260c0015161ffff16901b60a08360a0015161ffff16901b60b0846080015161ffff16901b60c0856060015161ffff16901b60d0866040015161ffff16901b60e0876020015161ffff16901b60f0885f015161ffff16901b1717171717179050919050565b896040516020016125cd98979695949392919061555c565b604051602081830303815290604052613d5e565b90505f6125ef828686613d98565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267191906152fe565b6001600160a01b0316635ff57d20307ff5d8f7a4041cf31e35e40569643a02f20f7706179aaa0b7764c077c3a607b275845f6040518563ffffffff1660e01b81526004016126c294939291906153e4565b5f6040518083038186803b1580156126d8575f5ffd5b505afa1580156126ea573d5f5f3e3d5ffd5b505050505050505050505050505050565b5f610639600160601b836155d4565b612712614b2c565b6040518060e00160405280612729845f0151613dbc565b815260200161273b8460200151613dbc565b815260200161274d8460400151613dbc565b815260200161275f8460600151613dbc565b81526020016127718460800151613dbc565b81526020016127838460a00151613dbc565b81526020016127958460c00151613dbc565b905292915050565b6127a5614ab4565b5f1987036127ce576127cb8887876127c56101a08e016101808f016155e7565b8661342a565b96505b87871061281d5760405162461bcd60e51b815260206004820181905260248201527f5072656d69756d206d757374206265206c657373207468616e207061796f757460448201526064016108c0565b64ffffffffff42166128376101c08b016101a08c016155e7565b64ffffffffff16116128835760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b60448201526064016108c0565b6128956101c08a016101a08b016155e7565b64ffffffffff168564ffffffffff16101580156128b6575088602001358810155b80156128c6575088604001358710155b6129385760405162461bcd60e51b815260206004820152603b60248201527f506f6c696379207265706c6163656d656e74206d75737420626520677265617460448201527f6572206f7220657175616c207468616e206f6c6420706f6c696379000000000060648201526084016108c0565b60fc54600160b01b900461ffff16610e1061295b6101a08c016101808d016155e7565b6129659088615600565b61296f919061561d565b64ffffffffff16106129c35760405162461bcd60e51b815260206004820152601b60248201527f506f6c6963792065786365656473206d6178206475726174696f6e000000000060448201526064016108c0565b6129d160408a013588615422565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5191906152fe565b604051636eb1769f60e11b81526001600160a01b0387811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa158015612abf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae39190615545565b1015612b015760405162461bcd60e51b81526004016108c090615646565b6001600160a01b038416331480612c215750612b2160408a013588615422565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906152fe565b6001600160a01b031663dd62ed3e86336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612bfa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1e9190615545565b10155b612c3d5760405162461bcd60e51b81526004016108c090615693565b612c45611f25565b881115612c645760405162461bcd60e51b81526004016108c0906156e2565b612c863083898b8a8a8f610180016020810190612c8191906155e7565b613dd1565b905088602001358160200151612c9c9190615422565b60fd5f828254612cac9190615532565b90915550612cba9050611736565b60fd541115612cdb5760405162461bcd60e51b81526004016108c090615734565b604051631f6be0d760e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ed7c1ae90612d2d908c90859089908990600401615777565b6020604051808303815f875af1158015612d49573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6d9190615545565b815298975050505050505050565b5f610639612d8f655af3107a4000846157c4565b613ae1565b80546127106201000090910461ffff161115612dfe5760405162461bcd60e51b815260206004820152602360248201527f56616c69646174696f6e3a206a72436f6c6c526174696f206d757374206265206044820152623c3d3160e81b60648201526084016108c0565b8054612710600160201b90910461ffff1611801590612e2857508054600160201b900461ffff1615155b612e7e5760405162461bcd60e51b815260206004820152602160248201527f56616c69646174696f6e3a20636f6c6c526174696f206d757374206265203c3d6044820152603160f81b60648201526084016108c0565b805461ffff6201000082048116600160201b909204161015612eee5760405162461bcd60e51b8152602060048201526024808201527f56616c69646174696f6e3a20636f6c6c526174696f203e3d206a72436f6c6c526044820152636174696f60e01b60648201526084016108c0565b8054619c4061ffff90911611801590612f105750805461138861ffff90911610155b612f5c5760405162461bcd60e51b815260206004820181905260248201527f56616c69646174696f6e3a206d6f63206d757374206265205b302e352c20345d60448201526064016108c0565b8054612710600160301b90910461ffff161115612fc75760405162461bcd60e51b8152602060048201526024808201527f56616c69646174696f6e3a20656e7375726f5070466565206d757374206265206044820152633c3d203160e01b60648201526084016108c0565b8054612710600160401b90910461ffff1611156130345760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a20656e7375726f436f63466565206d757374206265604482015264203c3d203160d81b60648201526084016108c0565b8054612710600160601b90910461ffff1611156130a15760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a207372526f63206d757374206265203c3d20312028604482015264313030252960d81b60648201526084016108c0565b8054612710600160501b90910461ffff16111561310e5760405162461bcd60e51b815260206004820152602560248201527f56616c69646174696f6e3a206a72526f63206d757374206265203c3d20312028604482015264313030252960d81b60648201526084016108c0565b8054600160901b900463ffffffff161580159061313857508054600160701b900463ffffffff1615155b61095b5760405162461bcd60e51b815260206004820152602160248201527f4578706f7375726520616e64204d61785061796f7574206d757374206265203e6044820152600360fc1b60648201526084016108c0565b5f54610100900460ff166131b45760405162461bcd60e51b81526004016108c0906157d7565b6131bc613f41565b6114f387878787878787613f77565b428164ffffffffff1610156131f357604051638727a7f960e01b815260040160405180910390fd5b5f613216308b8b8b8b8b8b896040516020016125cd98979695949392919061555c565b90505f613224828686613d98565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613282573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132a691906152fe565b6001600160a01b0316635ff57d20307fc6823861ee2bb2198ce6b1fd6faf4c8f44f745bc804aca4a762f67e0d507fd8a845f6040518563ffffffff1660e01b81526004016126c294939291906153e4565b6132ff614ab4565b61331a8989898987876133118c6126fb565b6118af8c611e17565b8051604051878152919250907f3e4224c37ba48f27f735eecea98c4d71568b9825d0006b6e128aa73695e35f709060200160405180910390a298975050505050505050565b6133676124cf565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124b23390565b5f826133a6612140565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134059190615822565b61340f9190615842565b61341a90600a615936565b611f009063ffffffff8416615944565b5f6134388287878787614178565b60e001519695505050505050565b61344e614ab4565b4260018901613467576134648a8989848761342a565b98505b8989106134b65760405162461bcd60e51b815260206004820181905260248201527f5072656d69756d206d757374206265206c657373207468616e207061796f757460448201526064016108c0565b8064ffffffffff168764ffffffffff16116135135760405162461bcd60e51b815260206004820181905260248201527f45787069726174696f6e206d75737420626520696e207468652066757475726560448201526064016108c0565b60fc54600160b01b900461ffff16610e1061352e838a615600565b613538919061561d565b64ffffffffff161061358c5760405162461bcd60e51b815260206004820152601b60248201527f506f6c6963792065786365656473206d6178206475726174696f6e000000000060448201526064016108c0565b6001600160a01b0385166135e25760405162461bcd60e51b815260206004820152601e60248201527f437573746f6d65722063616e2774206265207a65726f2061646472657373000060448201526064016108c0565b887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366391906152fe565b604051636eb1769f60e11b81526001600160a01b0389811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152919091169063dd62ed3e90604401602060405180830381865afa1580156136d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f59190615545565b10156137135760405162461bcd60e51b81526004016108c090615646565b6001600160a01b0386163314806138265750887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613782573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137a691906152fe565b6001600160a01b031663dd62ed3e88336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156137ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138239190615545565b10155b6138425760405162461bcd60e51b81526004016108c090615693565b61384a611f25565b8a11156138695760405162461bcd60e51b81526004016108c0906156e2565b61387830848b8d8c8c87613dd1565b9150816020015160fd5f82825461388f9190615532565b9091555061389d9050611736565b60fd5411156138be5760405162461bcd60e51b81526004016108c090615734565b604051636769a76f60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636769a76f906139109085908a908a908a9060040161595b565b6020604051808303815f875af115801561392c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139509190615545565b82525098975050505050505050565b5f611f008361396c612140565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cb9190615822565b6139d59190615842565b6139e090600a615936565b6139ea90846157c4565b61436b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7091906152fe565b6001600160a01b031663b3efcbd230843360016040518563ffffffff1660e01b8152600401613aa294939291906153e4565b602060405180830381865afa158015613abd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063991906159a2565b5f61ffff821115613b435760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016108c0565b5090565b613b4f6143cf565b81602d811115613b6157613b6161551e565b6040518281527f7bc647fe5043209e2019aa3503b79c1b0dd83eb61c56013d373a7584ff6bfb139060200160405180910390a25050565b613ba18161442c565b5f8190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c2f91906152fe565b6001600160a01b031614610a755760405163050f87e160e21b815260040160405180910390fd5b6001600160a01b0381163b613cc35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108c0565b5f516020615b245f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613cfa836144dd565b5f82511180613d065750805b1561230e57611e11838361451c565b60975460ff166125155760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108c0565b5f613d698251614541565b82604051602001613d7b9291906159d8565b604051602081830303815290604052805190602001209050919050565b5f5f5f613da68686866145d1565b91509150613db38161460a565b50949350505050565b5f610639655af3107a400061ffff8416615944565b613dd9614ab4565b84861115613e345760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b60648201526084016108c0565b613e3c614ab4565b6001600160a01b038916610160820152604081018790526020810186905260a0810185905264ffffffffff80841661018083015284166101a08201525f613e868988888888614178565b805160c0840152602081015160608085019190915260408201516080808601919091529082015161012085015281015161014084015260a081015160e080850191909152810151909150881015613f1f5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d0000000000000060448201526064016108c0565b60e0810151613f2e9089615422565b6101008301525098975050505050505050565b5f54610100900460ff16613f675760405162461bcd60e51b81526004016108c0906157d7565b613f6f614753565b612515614779565b5f54610100900460ff16613f9d5760405162461bcd60e51b81526004016108c0906157d7565b60fb613fa98882615a5d565b50604080516101408101825261271081525f6020820152908101613fcc88612d7b565b61ffff168152602001613fde87612d7b565b61ffff1681525f602082018190526040820152606001613ffd86612d7b565b61ffff16815260200161401160028661395f565b63ffffffff1681526020016140265f8561395f565b63ffffffff9081168252612238602092830152825160fc80549385015160408601516060870151608088015160a089015160c08a015160e08b01516101008c0151610120909c015161ffff998a1663ffffffff19909c169b909b1762010000978a16979097029690961767ffffffff000000001916600160201b9589169590950261ffff60301b191694909417600160301b938816939093029290921763ffffffff60401b1916600160401b9187169190910261ffff60501b191617600160501b918616919091021765ffffffffffff60601b1916600160601b9185169190910263ffffffff60701b191617600160701b918516919091021765ffffffffffff60901b1916600160901b959093169490940261ffff60b01b191691909117600160b01b91909216021790555f60fd5560fe80546001600160a01b0319166001600160a01b0383161790556114f36143cf565b6141b86040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b85516141d0906141c99086906147a7565b86906147a7565b815260208601516141e29086906147a7565b602082018190528151101561420c578051602082018051614204908390615422565b905250614213565b5f60208201525b60408601516142239086906147a7565b6040820152602081015181516142399190615532565b8160400151111561426e57602081015181516142559190615532565b816040018181516142669190615422565b905250614275565b5f60408201525b6142b26301e133806142878486615600565b64ffffffffff168860a0015161429d9190615944565b6142a791906157c4565b6020830151906147a7565b60608201526142f46301e133806142c98486615600565b64ffffffffff168860c001516142df9190615944565b6142e991906157c4565b6040830151906147a7565b6080820181905260608201515f9161430b91615532565b90506143248760800151826147a790919063ffffffff16565b60608801518351614334916147a7565b61433e9190615532565b60a083018190528251829161435291615532565b61435c9190615532565b60e08301525095945050505050565b5f63ffffffff821115613b435760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016108c0565b60fd546143da611736565b10156143f957604051631adcca4560e11b815260040160405180910390fd5b60fe546001600160a01b031661442257604051634d1c286960e11b815260040160405180910390fd5b61251560fc612d94565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015614492573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144b691906152fe565b6001600160a01b03161461095b5760405163d2b3d33f60e01b815260040160405180910390fd5b6144e681613c56565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060611f008383604051806060016040528060278152602001615b64602791396147dd565b60605f61454d83614851565b60010190505f8167ffffffffffffffff81111561456c5761456c614c2f565b6040519080825280601f01601f191660200182016040528015614596576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846145a057509392505050565b5f806001600160ff1b038316816145ed60ff86901c601b615532565b90506145fb87828885614928565b9350935050505b935093915050565b5f81600481111561461d5761461d61551e565b036146255750565b60018160048111156146395761463961551e565b036146865760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108c0565b600281600481111561469a5761469a61551e565b036146e75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108c0565b60038160048111156146fb576146fb61551e565b0361095b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108c0565b5f54610100900460ff166125155760405162461bcd60e51b81526004016108c0906157d7565b5f54610100900460ff1661479f5760405162461bcd60e51b81526004016108c0906157d7565b6125156149e5565b5f81156706f05b59d3b2000019839004841115176147c3575f5ffd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b60605f5f856001600160a01b0316856040516147f99190615b18565b5f60405180830381855af49150503d805f8114614831576040519150601f19603f3d011682016040523d82523d5f602084013e614836565b606091505b509150915061484786838387614a17565b9695505050505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061488f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148bb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148d957662386f26fc10000830492506010015b6305f5e10083106148f1576305f5e100830492506008015b612710831061490557612710830492506004015b60648310614917576064830492506002015b600a83106106395760010192915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561495d57505f905060036149dc565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156149ae573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166149d6575f600192509250506149dc565b91505f90505b94509492505050565b5f54610100900460ff16614a0b5760405162461bcd60e51b81526004016108c0906157d7565b6097805460ff19169055565b60608315614a855782515f03614a7e576001600160a01b0385163b614a7e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c0565b508161176d565b61176d8383815115614a9a5781518083602001fd5b8060405162461bcd60e51b81526004016108c09190614b89565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b031681526020015f64ffffffffff1681526020015f64ffffffffff1681525090565b6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f60208284031215614b72575f5ffd5b81356001600160e01b031981168114611f00575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215614bce575f5ffd5b5035919050565b6001600160a01b038116811461095b575f5ffd5b5f60208284031215614bf9575f5ffd5b8135611f0081614bd5565b5f6101c08284031215614c15575f5ffd5b50919050565b803564ffffffffff81168114611f0f575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051610140810167ffffffffffffffff81118282101715614c6757614c67614c2f565b60405290565b803561ffff81168114611f0f575f5ffd5b803563ffffffff81168114611f0f575f5ffd5b5f6101408284031215614ca2575f5ffd5b614caa614c43565b9050614cb582614c6d565b8152614cc360208301614c6d565b6020820152614cd460408301614c6d565b6040820152614ce560608301614c6d565b6060820152614cf660808301614c6d565b6080820152614d0760a08301614c6d565b60a0820152614d1860c08301614c6d565b60c0820152614d2960e08301614c7e565b60e0820152614d3b6101008301614c7e565b610100820152614d4e6101208301614c6d565b61012082015292915050565b5f5f5f5f5f5f5f5f5f5f6104008b8d031215614d74575f5ffd5b614d7e8c8c614c04565b99506101c08b013598506101e08b013597506102008b01359650614da56102208c01614c1b565b95506102408b01359450614dbd8c6102608d01614c91565b93506103a08b013592506103c08b01359150614ddc6103e08c01614c1b565b90509295989b9194979a5092959850565b5f5f67ffffffffffffffff841115614e0757614e07614c2f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614e3657614e36614c2f565b604052838152905080828401851015614e4d575f5ffd5b838360208301375f60208583010152509392505050565b5f5f60408385031215614e75575f5ffd5b8235614e8081614bd5565b9150602083013567ffffffffffffffff811115614e9b575f5ffd5b8301601f81018513614eab575f5ffd5b614eba85823560208401614ded565b9150509250929050565b5f5f828403610100811215614ed7575f5ffd5b8335925060e0601f1982011215614eec575f5ffd5b506020830190509250929050565b5f5f5f5f5f5f5f60e0888a031215614f10575f5ffd5b873567ffffffffffffffff811115614f26575f5ffd5b8801601f81018a13614f36575f5ffd5b614f458a823560208401614ded565b9750506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614f7981614bd5565b8091505092959891949750929550565b5f5f5f5f5f5f5f5f5f5f6101408b8d031215614fa3575f5ffd5b8a35995060208b0135985060408b01359750614fc160608c01614c1b565b965060808b0135614fd181614bd5565b955060a08b0135945060c08b0135935060e08b013592506101008b01359150614ddc6101208c01614c1b565b5f5f6101e0838503121561500f575f5ffd5b6150198484614c04565b946101c0939093013593505050565b5f5f5f5f5f5f5f5f5f5f6102e08b8d031215615042575f5ffd5b61504c8c8c614c04565b99506101c08b013598506101e08b013597506102008b013596506150736102208c01614c1b565b95506102408b013594506102608b013593506102808b013592506102a08b01359150614ddc6102c08c01614c1b565b5f5f5f606084860312156150b4575f5ffd5b83359250602084013591506150cb60408501614c1b565b90509250925092565b5f5f5f5f5f5f5f5f5f5f6102608b8d0312156150ee575f5ffd5b8a35995060208b0135985060408b0135975061510c60608c01614c1b565b965060808b013561511c81614bd5565b955060a08b013594506151328c60c08d01614c91565b93506102008b013592506102208b01359150614ddc6102408c01614c1b565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516151db6101608401826001600160a01b03169052565b506101808101516151f661018084018264ffffffffff169052565b506101a081015161230e6101a084018264ffffffffff169052565b6101c081016106398284615151565b5f5f5f5f60808587031215615233575f5ffd5b843593506020850135925061524a60408601614c1b565b9396929550929360600135925050565b5f5f6040838503121561526b575f5ffd5b8235600a8110615279575f5ffd5b946020939093013593505050565b5f5f5f5f6101a0858703121561529b575f5ffd5b84359350602085013592506152b260408601614c1b565b91506152c18660608701614c91565b905092959194509250565b600181811c908216806152e057607f821691505b602082108103614c1557634e487b7160e01b5f52602260045260245ffd5b5f6020828403121561530e575f5ffd5b8151611f0081614bd5565b6001600160a01b039586168152602081019490945260408401929092529092166060820152901515608082015260a00190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106395761063961540e565b8035611f0f81614bd5565b803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e080820135908301526101008082013590830152610120808201359083015261014080820135908301526154b86101608201615435565b6001600160a01b03166101608301526154d46101808201614c1b565b64ffffffffff166101808301526154ee6101a08201614c1b565b64ffffffffff81166101a0840152505050565b6101e081016155108285615440565b826101c08301529392505050565b634e487b7160e01b5f52602160045260245ffd5b808201808211156106395761063961540e565b5f60208284031215615555575f5ffd5b5051919050565b60609890981b6bffffffffffffffffffffffff1916885260148801969096526034870194909452605486019290925260d890811b6001600160d81b031990811660748701526079860192909252609985019290925291901b1660b982015260be0190565b634e487b7160e01b5f52601260045260245ffd5b5f826155e2576155e26155c0565b500690565b5f602082840312156155f7575f5ffd5b611f0082614c1b565b64ffffffffff82811682821603908111156106395761063961540e565b5f64ffffffffff831680615633576156336155c0565b8064ffffffffff84160491505092915050565b6020808252602d908201527f596f75206d75737420616c6c6f7720454e5355524f20746f207472616e73666560408201526c7220746865207072656d69756d60981b606082015260800190565b6020808252602f908201527f5061796572206d75737420616c6c6f772063616c6c657220746f207472616e7360408201526e66657220746865207072656d69756d60881b606082015260800190565b60208082526032908201527f5269736b4d6f64756c653a205061796f7574206973206d6f7265207468616e206040820152716d6178696d756d2070657220706f6c69637960701b606082015260800190565b60208082526023908201527f5269736b4d6f64756c653a204578706f73757265206c696d697420657863656560408201526219195960ea1b606082015260800190565b6103c081016157868287615440565b6157946101c0830186615151565b6001600160a01b03939093166103808201526bffffffffffffffffffffffff919091166103a09091015292915050565b5f826157d2576157d26155c0565b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215615832575f5ffd5b815160ff81168114611f00575f5ffd5b60ff82811682821603908111156106395761063961540e565b6001815b60018411156146025780850481111561587a5761587a61540e565b600184161561588857908102905b60019390931c92800261585f565b5f826158a457506001610639565b816158b057505f610639565b81600181146158c657600281146158d0576158ec565b6001915050610639565b60ff8411156158e1576158e161540e565b50506001821b610639565b5060208310610133831016604e8410600b841016171561590f575081810a610639565b61591b5f19848461585b565b805f190482111561592e5761592e61540e565b029392505050565b5f611f0060ff841683615896565b80820281158282048414176106395761063961540e565b610220810161596a8287615151565b6001600160a01b039485166101c0830152929093166101e08401526bffffffffffffffffffffffff1661020090920191909152919050565b5f602082840312156159b2575f5ffd5b81518015158114611f00575f5ffd5b5f81518060208401855e5f93019283525090919050565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525f61176d615a0c601a8401866159c1565b846159c1565b601f82111561230e57805f5260205f20601f840160051c81016020851015615a375750805b601f840160051c820191505b81811015615a56575f8155600101615a43565b5050505050565b815167ffffffffffffffff811115615a7757615a77614c2f565b615a8b81615a8584546152cc565b84615a12565b6020601f821160018114615abd575f8315615aa65750848201515b5f19600385901b1c1916600184901b178455615a56565b5f84815260208120601f198516915b82811015615aec5787850151825560209485019460019092019101615acc565b5084821015615b0957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f611f0082846159c156fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220833bf365115b989c34479d926a84a113fdc952fe9a5442a8c9fb00b658d1b5eb64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
