{
  "contractName": "PAMEngine",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "bdc",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "computeEventTimeForEvent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "computeInitialState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastScheduleTime",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeNextCyclicEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        }
      ],
      "name": "computeNonCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computePayoffForEvent",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computeStateForEvent",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractType",
      "outputs": [
        {
          "internalType": "enum ContractType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ScalingEffect",
              "name": "scalingEffect",
              "type": "uint8"
            },
            {
              "internalType": "enum PenaltyType",
              "name": "penaltyType",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "marketObjectCodeRateReset",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "capitalizationEndDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfInterestPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRateReset",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfScalingIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "rateSpread",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextResetRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "penaltyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "premiumDiscountAtIED",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lifeFloor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodCap",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "periodFloor",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfInterestPayment",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfRateReset",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfScalingIndex",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            }
          ],
          "internalType": "struct PAMTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "name": "isEventScheduled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506140bc806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063e8d0c6721461028f578063edc0465f14610219578063f5586e05146102a257610121565b8063aaf5eb6814610211578063c40c5a9814610219578063cb2ef6f714610221578063dceda25414610236578063dd37acde1461025657610121565b80636942d1a8116100f45780636942d1a8146101a25780636f37e55b146101b557806372540003146101bd578063811322fb146101de578063931172d1146101f157610121565b8063179331f3146101265780631a2e165d1461014f5780634c7c3fd61461016f5780635ada17d81461018f575b600080fd5b610139610134366004613308565b6102b5565b60405161014691906138f1565b60405180910390f35b61016261015d366004613240565b610385565b60405161014691906138d4565b61018261017d3660046133c3565b6103ac565b6040516101469190613f35565b61016261019d3660046133df565b610424565b6101826101b03660046133df565b6104f9565b610162610529565b6101d06101cb366004613228565b610535565b6040516101469291906138ff565b6101626101ec366004613346565b61055e565b6102046101ff366004613493565b610572565b6040516101469190613885565b610162610ad7565b610162610adc565b610229610ae1565b60405161014691906138dd565b610249610244366004613286565b610ae6565b60405161014691906138c9565b610162610264366004613426565b610af1565b610162610277366004613361565b610dbf565b61016261028a366004613862565b610ddd565b61020461029d36600461345d565b610f29565b6101626102b0366004613862565b61109c565b600060018460018111156102c557fe5b1415610341576102d483611107565b6102dd84611129565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b815260040161037590613e42565b60405180910390fd5b9392505050565b60008061039186610535565b9150506103a081868686610ddd565b9150505b949350505050565b6103b4612fc4565b6103bc612fc4565b60008152670de0b6b3a764000061018082018190526101608201526101a083013560208201526101e083013560608201526102c083013560e08201526102e08301356101408201526103008301356101008201526103a083013561012082015290505b919050565b600080610439610160870161014088016131f1565b6001600160a01b031614158015610484575061045d610160860161014087016131f1565b6001600160a01b0316610478610140870161012088016131f1565b6001600160a01b031614155b156104c8576104c1826104b561049f368990038901896134df565b6104ae36899003890189613765565b8787611138565b9063ffffffff61130616565b90506103a4565b6104f06104da368790038701876134df565b6104e936879003870187613765565b8585611138565b95945050505050565b610501612fc4565b6104f0610513368790038701876134df565b61052236879003870187613765565b85856113a4565b670de0b6b3a764000081565b6000808060f884901c601c81111561054957fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561056c57fe5b92915050565b606061057c61305e565b6000600984601c81111561058c57fe5b141561069a576102408701351561069a576105a561305e565b6105e06102408901356101e08a01356105c7368c90038c016105808d016133a8565b6105d760c08d0160a08e016132ec565b60018c8c611575565b905060005b60788160ff16101561069757818160ff166078811061060057fe5b602002015161060e57610697565b886102200135828260ff166078811061062357fe5b6020020151116106325761068f565b610650828260ff166078811061064457fe5b6020020151898961175f565b6106595761068f565b6106776009838360ff166078811061066d57fe5b6020020151610dbf565b84846078811061068357fe5b60200201526001909201915b6001016105e5565b50505b600a84601c8111156106a857fe5b14156107ad57610240870135158015906106c6575061022087013515155b156107ad576106d361307d565b6106e63689900389016105808a016133a8565b6001604082015290506106f761305e565b6107206102408a01356102208b01358461071760c08e0160a08f016132ec565b60018d8d611575565b905060005b60788160ff1610156107a957818160ff166078811061074057fe5b602002015161074e576107a9565b61076c828260ff166078811061076057fe5b60200201518a8a61175f565b610775576107a1565b610789600a838360ff166078811061066d57fe5b85856078811061079557fe5b60200201526001909301925b600101610725565b5050505b600d84601c8111156107bb57fe5b141561088f576102608701351561088f576107d461305e565b61080f6102608901356101e08a01356107f6368c90038c016106008d016133a8565b61080660c08d0160a08e016132ec565b60008c8c611575565b905060005b60788160ff16101561088c57818160ff166078811061082f57fe5b602002015161083d5761088c565b61084f828260ff166078811061064457fe5b61085857610884565b61086c600d838360ff166078811061066d57fe5b84846078811061087857fe5b60200201526001909201915b600101610814565b50505b600384601c81111561089d57fe5b1415610958576102a087013515610958576108b661305e565b6108d86102a08901356101e08a01356105c7368c90038c016107008d016133a8565b905060005b60788160ff16101561095557818160ff16607881106108f857fe5b602002015161090657610955565b610918828260ff166078811061064457fe5b6109215761094d565b6109356003838360ff166078811061066d57fe5b84846078811061094157fe5b60200201526001909201915b6001016108dd565b50505b601284601c81111561096657fe5b1415610a4a57600061097e60e0890160c08a0161338c565b600381111561098957fe5b1415801561099b575061028087013515155b15610a4a576109a861305e565b6109ca6102808901356101e08a01356105c7368c90038c016106808d016133a8565b905060005b60788160ff161015610a4757818160ff16607881106109ea57fe5b60200201516109f857610a47565b610a0a828260ff166078811061064457fe5b610a1357610a3f565b610a276012838360ff166078811061066d57fe5b848460788110610a3357fe5b60200201526001909201915b6001016109cf565b50505b60608167ffffffffffffffff81118015610a6357600080fd5b50604051908082528060200260200182016040528015610a8d578160200160208202803683370190505b50905060005b82811015610acb57838160788110610aa757fe5b6020020151828281518110610ab857fe5b6020908102919091010152600101610a93565b50979650505050505050565b601281565b607881565b600090565b600195945050505050565b6000600982601c811115610b0157fe5b1415610ba157610b1961060085016105e0860161320c565b15156001148015610b2e575061024084013515155b15610ba1576000610b67610b4b36879003870161058088016133a8565b610b5b60c0880160a089016132ec565b8761024001358761178e565b905080610b7857506000905061037e565b8461022001358111610b8e57506000905061037e565b610b99600982610dbf565b91505061037e565b600a82601c811115610baf57fe5b1415610c3f5761024084013515801590610bcd575061022084013515155b15610c3f57610bda61307d565b610bed36869003860161058087016133a8565b6001604082015290506000610c1882610c0c60c0890160a08a016132ec565b8861024001358861178e565b905080610c2b57506000915061037e9050565b610c36600a82610dbf565b9250505061037e565b600d82601c811115610c4d57fe5b1415610cae5761026084013515610cae576000610c92610c7636879003870161060088016133a8565b610c8660c0880160a089016132ec565b8761026001358761178e565b905080610ca357506000905061037e565b610b99600d82610dbf565b600382601c811115610cbc57fe5b1415610d1d576102a084013515610d1d576000610d01610ce536879003870161070088016133a8565b610cf560c0880160a089016132ec565b876102a001358761178e565b905080610d1257506000905061037e565b610b99600382610dbf565b601282601c811115610d2b57fe5b1415610db5576000610d4360e0860160c0870161338c565b6003811115610d4e57fe5b14158015610d60575061028084013515155b15610db5576000610d99610d7d36879003870161068088016133a8565b610d8d60c0880160a089016132ec565b8761028001358761178e565b905080610daa57506000905061037e565b610b99601282610dbf565b5060009392505050565b60008160f884601c811115610dd057fe5b60ff16901b179392505050565b600081851415610dee5750836103a4565b6001846008811115610dfc57fe5b1480610e1357506003846008811115610e1157fe5b145b15610e22576104c185846117e9565b6002846008811115610e3057fe5b1480610e4757506004846008811115610e4557fe5b145b15610e8b576000610e5886856117e9565b9050610e6386611845565b610e6c82611845565b1415610e795790506103a4565b610e83868561185c565b9150506103a4565b6005846008811115610e9957fe5b1480610eb057506007846008811115610eae57fe5b145b15610ebf576104c1858461185c565b6006846008811115610ecd57fe5b1480610ee457506008846008811115610ee257fe5b145b15610f20576000610ef5868561185c565b9050610f0086611845565b610f0982611845565b1415610f165790506103a4565b610e8386856117e9565b50929392505050565b6060610f3361305e565b6000610200860135158015610f535750610f53866101c00135868661175f565b15610f8157610f686002876101c00135610dbf565b828261ffff1660788110610f7857fe5b60200201526001015b61020086013515610fca57610f9c866102000135868661175f565b15610fca57610fb1600f876102000135610dbf565b828261ffff1660788110610fc157fe5b60200201526001015b610fda866101e00135868661175f565b1561100857610fef6014876101e00135610dbf565b828261ffff1660788110610fff57fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561102557600080fd5b5060405190808252806020026020018201604052801561104f578160200160208202803683370190505b50905060005b8261ffff168110156110915783816078811061106d57fe5b602002015182828151811061107e57fe5b6020908102919091010152600101611055565b509695505050505050565b600060038460088111156110ac57fe5b14806110c3575060048460088111156110c157fe5b145b806110d9575060078460088111156110d757fe5b145b806110ef575060088460088111156110ed57fe5b145b156110fb5750836103a4565b6104f085858585610ddd565b6000808061111a62015180855b046118aa565b50915091506103a48282611940565b60006103a46201518083611114565b600080600061114685610535565b9092509050601c82601c81111561115957fe5b141561116a576000925050506103a4565b600a82601c81111561117857fe5b1415611189576000925050506103a4565b600c82601c81111561119757fe5b14156111a8576000925050506103a4565b600d82601c8111156111b657fe5b14156111c7576000925050506103a4565b601282601c8111156111d557fe5b14156111e6576000925050506103a4565b600b82601c8111156111f457fe5b1415611205576000925050506103a4565b600382601c81111561121357fe5b141561122e57611225878783876119c6565b925050506103a4565b600282601c81111561123c57fe5b141561124e5761122587878387611a80565b600982601c81111561125c57fe5b141561126e5761122587878387611abe565b600882601c81111561127c57fe5b141561128e5761122587878387611b2d565b601482601c81111561129c57fe5b14156112ae5761122587878387611b4e565b600782601c8111156112bc57fe5b14156112ce5761122587878387611b6c565b601182601c8111156112dc57fe5b14156112ee5761122587878387611c23565b60405162461bcd60e51b815260040161037590613bc0565b6000821580611313575081155b156113205750600061056c565b826000191480156113345750600160ff1b82145b156113515760405162461bcd60e51b815260040161037590613b79565b8282028284828161135e57fe5b051461137c5760405162461bcd60e51b815260040161037590613b79565b670de0b6b3a76400008105806103a45760405162461bcd60e51b815260040161037590613a92565b6113ac612fc4565b6000806113b885610535565b9092509050601c82601c8111156113cb57fe5b14156113dd5761122587878387611cad565b600382601c8111156113eb57fe5b14156113fd5761122587878387611d4c565b600282601c81111561140b57fe5b141561141d5761122587878387611db6565b600a82601c81111561142b57fe5b141561143d5761122587878387611dfd565b600982601c81111561144b57fe5b141561145d5761122587878387611e8f565b600882601c81111561146b57fe5b141561147d5761122587878387611cad565b601482601c81111561148b57fe5b141561149d5761122587878387611ee8565b600782601c8111156114ab57fe5b14156114bd5761122587878387611cad565b600c82601c8111156114cb57fe5b14156114dd5761122587878387611f80565b600d82601c8111156114eb57fe5b14156114fd576112258787838761201c565b601282601c81111561150b57fe5b141561151d576112258787838761216d565b601182601c81111561152b57fe5b141561153d5761122587878387612270565b600b82601c81111561154b57fe5b141561155d57611225878783876122a7565b60405162461bcd60e51b815260040161037590613d02565b61157d61305e565b61158561305e565b60608701516000906115ed5761159c8a868661175f565b156115b757898282607881106115ae57fe5b60200201526001015b6115c289868661175f565b156115e557600186151514156115e557888282607881106115df57fe5b60200201525b509050611754565b896000806115fc8a848d6102b5565b90505b8b8310156116915761161283898961175f565b1561165057607684106116375760405162461bcd60e51b81526004016103759061396a565b8285856078811061164457fe5b60200201526001909301925b60019182019181600181111561166257fe5b14611677576116728b8e84612392565b61168a565b61168a6116858c8f85612392565b6124c3565b92506115ff565b600189151514156116bf576116a78c898961175f565b156116bf578b8585607881106116b957fe5b60200201525b6000841180156116dc57506116dc85600186036078811061064457fe5b1561174c5760008b6040015160018111156116f357fe5b1480156117005750600184115b801561170c5750828c14155b1561174c5784846078811061171d57fe5b602002015185600186036078811061173157fe5b602002015284846078811061174257fe5b6020020160008152505b509293505050505b979650505050505050565b6000818311156117715750600061037e565b8383111580156117815750818411155b15610db55750600161037e565b606084015160009015806117a0575081155b156117ac5750816103a4565b60016117b98585886102b5565b60018111156117c457fe5b146117da576117d585836001612392565b6104f0565b6104f061168586846001612392565b600060018260018111156117f957fe5b141561183e57611808836124fc565b600614156118225761181b83600261250f565b905061056c565b61182b836124fc565b6007141561183e5761181b83600161250f565b5090919050565b60006118546201518083611114565b509392505050565b6000600182600181111561186c57fe5b141561183e5761187b836124fc565b6006141561188e5761181b836001612524565b611897836124fc565b6007141561183e5761181b836002612524565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161190157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806119515750816003145b8061195c5750816005145b806119675750816007145b806119725750816008145b8061197d575081600a145b80611988575081600c145b156119955750601f61056c565b816002146119a55750601e61056c565b6119ae83612539565b6119b957601c6119bc565b601d5b60ff169392505050565b60008085610100015160018111156119da57fe5b14156119fe578461038001516119f3866040015161255e565b60000b0290506103a4565b6000611a49611a208660200151886080015189602001518a6101e0015161109c565b611a398689608001518a602001518b6101e0015161109c565b8860600151896101e00151612622565b90506103a0611a6e8660e001516104b58961038001518561130690919063ffffffff16565b6101208701519063ffffffff61271f16565b6000611a9f856104000151866102c0015161271f90919063ffffffff16565b611aac866040015161255e565b6000190260000b029050949350505050565b600080611ae1611a208660200151886080015189602001518a6101e0015161109c565b90506103a0611b1b611b098760e001516104b58961014001518661130690919063ffffffff16565b6101008801519063ffffffff61271f16565b6101608701519063ffffffff61130616565b60008360e00151611b41866040015161255e565b60000b0295945050505050565b60006104f08460e0015185610180015161130690919063ffffffff16565b600080611b8f611a208660200151886080015189602001518a6101e0015161109c565b905060018660e001516003811115611ba357fe5b1415611bc857856103c00151611bbc876040015161255e565b60000b029150506103a4565b60028660e001516003811115611bda57fe5b1415611c0d57611c008560e001516104b5886103c001518461130690919063ffffffff16565b611bbc876040015161255e565b60e0850151611c0090829063ffffffff61130616565b600080611c46611a208660200151886080015189602001518a6101e0015161109c565b9050611c92611c6b8660e001516104b58861014001518561130690919063ffffffff16565b610100870151610420890151611c869163ffffffff61271f16565b9063ffffffff61271f16565b611c9f876040015161255e565b60000b029695505050505050565b611cb5612fc4565b6000611cd7611a208660200151886080015189602001518a6101e0015161109c565b9050611d0e611cfc826104b58860e0015189610140015161130690919063ffffffff16565b6101008701519063ffffffff61271f16565b61010086015260e0850151610380870151611d3991611a6e9184916104b5919063ffffffff61130616565b6101208601525050506020820152919050565b611d54612fc4565b6000611d76611a208660200151886080015189602001518a6101e0015161109c565b9050611d9b611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015250506000610120840152506020820152919050565b611dbe612fc4565b846102c00151611dd1866040015161255e565b60000b0260e085015250506102e083015161014083015260208201526103009091015161010082015290565b611e05612fc4565b6000611e27611a208660200151886080015189602001518a6101e0015161109c565b9050611e60611e4f611b09836104b58960e001518a610140015161130690919063ffffffff16565b60e08701519063ffffffff61271f16565b60e086018190526000610100870152610380870151611d3991611a6e9184916104b5919063ffffffff61130616565b611e97612fc4565b6000611eb9611a208660200151886080015189602001518a6101e0015161109c565b600061010087015260e0860151610380880151919250611d3991611a6e9184916104b59163ffffffff61130616565b611ef0612fc4565b6000611f12611a208660200151886080015189602001518a6101e0015161109c565b9050611f37611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e0850151610380870151611f6291611a6e9184916104b5919063ffffffff61130616565b6101208601525050600060e084015250600482526020820152919050565b611f88612fc4565b6000611faa611a208660200151886080015189602001518a6101e0015161109c565b9050611fcf611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e0850151610380870151611ffa91611a6e9184916104b5919063ffffffff61130616565b6101208601525050506103609290920151610140820152602081019190915290565b612024612fc4565b61034085015161032086015160009161204891611c8690869063ffffffff61130616565b905060006120648661014001518361276590919063ffffffff16565b9050612093876104800151612087896104a00151846127ab90919063ffffffff16565b9063ffffffff6127bb16565b6101408701519091506120ac908263ffffffff61271f16565b91506120cf876104400151612087896104600151856127ab90919063ffffffff16565b9150600061211c6120f388602001518a608001518b602001518c6101e0015161109c565b61210c888b608001518c602001518d6101e0015161109c565b8a606001518b6101e00151612622565b9050612153612141826104b58a60e001518b610140015161130690919063ffffffff16565b6101008901519063ffffffff61271f16565b610100880152505061014085015250506020820152919050565b612175612fc4565b6000612197611a208660200151886080015189602001518a6101e0015161109c565b90506121bc611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e08501516103808701516121e791611a6e9184916104b5919063ffffffff61130616565b61012086015260018660c0015160038111156121ff57fe5b148061221a575060038660c00151600381111561221857fe5b145b156122285760006101608601525b60028660c00151600381111561223a57fe5b1480612255575060038660c00151600381111561225357fe5b145b156122635760006101808601525b5050506020820152919050565b612278612fc4565b5050600060e0830181905261014083018190526101008301819052610120830152600582526020820152919050565b6122af612fc4565b600084604001516000146122c75784604001516122e0565b6122e08487608001518860200151896101e00151610ddd565b6104c08701516040015190915083906000901561231b576000612308896104c00151856127cb565b905080831161231957600180895291505b505b876104e0015160400151801561232f575080155b1561235e576000612345896104e00151856127cb565b9050808311612357576002885261235c565b600388525b505b6040870151612386576123808689608001518a602001518b6101e00151610ddd565b60408801525b50949695505050505050565b60008080856020015160058111156123a657fe5b14156123c15784516104c1908590850263ffffffff61250f16565b6001856020015160058111156123d357fe5b14156123f15784516104c1908590850260070263ffffffff61250f16565b60028560200151600581111561240357fe5b141561241e5784516104c1908590850263ffffffff6128f716565b60038560200151600581111561243057fe5b141561244e5784516104c1908590850260030263ffffffff6128f716565b60048560200151600581111561246057fe5b141561247e5784516104c1908590850260060263ffffffff6128f716565b60058560200151600581111561249057fe5b14156124ab5784516104c1908590850263ffffffff61297116565b60405162461bcd60e51b8152600401610375906139b8565b6000806000806124d285612998565b9194509250905060006124e58484611940565b90506124f28484836129b6565b9695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561056c57600080fd5b62015180810282038281111561056c57600080fd5b60006004820615801561254e57506064820615155b8061056c57505061019090061590565b60008082600c81111561256d57fe5b141561257b5750600161041f565b600182600c81111561258957fe5b1415612598575060001961041f565b600682600c8111156125a657fe5b14156125b45750600161041f565b600782600c8111156125c257fe5b14156125d1575060001961041f565b600282600c8111156125df57fe5b14156125ed5750600161041f565b600382600c8111156125fb57fe5b141561260a575060001961041f565b60405162461bcd60e51b815260040161037590613b25565b6000848410156126445760405162461bcd60e51b815260040161037590613cbb565b600083600581111561265257fe5b1415612662576104c185856129d0565b600183600581111561267057fe5b1415612680576104c18585612ae4565b600283600581111561268e57fe5b141561269e576104c18585612b0f565b60048360058111156126ac57fe5b14156126bc576104c18585612b2e565b60038360058111156126ca57fe5b14156126db576104c1858584612bef565b60058360058111156126e957fe5b14156127075760405162461bcd60e51b815260040161037590613c0d565b60405162461bcd60e51b815260040161037590613a06565b60008282018183128015906127345750838112155b80612749575060008312801561274957508381125b61037e5760405162461bcd60e51b815260040161037590613ae4565b600081830381831280159061277a5750838113155b8061278f575060008312801561278f57508381135b61037e5760405162461bcd60e51b815260040161037590613ead565b60008183121561183e5750919050565b60008183131561183e578161037e565b60008080846020015160058111156127df57fe5b14156127ff5783516127f890849063ffffffff61250f16565b905061037e565b60018460200151600581111561281157fe5b141561282d5783516127f890849060070263ffffffff61250f16565b60028460200151600581111561283f57fe5b14156128585783516127f890849063ffffffff6128f716565b60038460200151600581111561286a57fe5b14156128865783516127f890849060030263ffffffff6128f716565b60048460200151600581111561289857fe5b14156128b45783516127f890849060060263ffffffff6128f716565b6005846020015160058111156128c657fe5b14156128df5783516127f890849063ffffffff61297116565b60405162461bcd60e51b815260040161037590613de5565b60008080806129096201518087611114565b600c9188016000198101838104949094019650945092509006600101915060006129338484611940565b905080821115612941578091505b62015180870662015180612956868686612cc5565b020194508685101561296757600080fd5b5050505092915050565b60008080806129836201518087611114565b91870194509250905060006129338484611940565b600080806129a96201518085611114565b9196909550909350915050565b6000620151806129c7858585612cc5565b02949350505050565b6000806129dc84612d41565b905060006129e984612d41565b905060006129f686612d59565b612a025761016d612a06565b61016e5b61ffff16905081831415612a3857612a2e81612a228888612d76565b9063ffffffff612d9116565b935050505061056c565b6000612a4386612d59565b612a4f5761016d612a53565b61016e5b61ffff1690506000612a8483612a228a612a7f612a778a600163ffffffff612e4d16565b6001806129b6565b612d76565b90506000612aa183612a22612a9b886001806129b6565b8b612d76565b9050612ad7612ac76001612abb888a63ffffffff612e7216565b9063ffffffff612e7216565b611c86848463ffffffff61271f16565b9998505050505050505050565b600061037e610168612a2262015180612b03868863ffffffff612e7216565b9063ffffffff612eb416565b600061037e61016d612a2262015180612b03868863ffffffff612e7216565b6000806000806000806000612b4289612998565b975095509350612b5188612998565b945092509050601f861415612b6557601e95505b82601f1415612b7357601e92505b6000612b85848863ffffffff61276516565b90506000612b99848863ffffffff61276516565b90506000612bad848863ffffffff61276516565b9050612bdf610168612a2285611c86612bcd87601e63ffffffff612ef616565b611c868761016863ffffffff612ef616565b9c9b505050505050505050505050565b6000806000806000806000612c038a612998565b975095509350612c1289612998565b945092509050612c218a611107565b861415612c2d57601e95505b8789148015612c3c5750816002145b158015612c505750612c4d89611107565b83145b15612c5a57601e92505b6000612c6c848863ffffffff61276516565b90506000612c80848863ffffffff61276516565b90506000612c94848863ffffffff61276516565b9050612cb4610168612a2285611c86612bcd87601e63ffffffff612ef616565b9d9c50505050505050505050505050565b60006107b2841015612cd657600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281612d1257fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000612d506201518083611114565b50909392505050565b600080612d696201518084611114565b5050905061037e81612539565b600081831115612d8557600080fd5b50620151809190030490565b600081612db05760405162461bcd60e51b815260040161037590613ef1565b82612dbd5750600061056c565b670de0b6b3a764000083810290848281612dd357fe5b0514612df15760405162461bcd60e51b815260040161037590613d9f565b82600019148015612e055750600160ff1b84145b15612e225760405162461bcd60e51b815260040161037590613d9f565b6000838281612e2d57fe5b059050806103a45760405162461bcd60e51b815260040161037590613c6a565b60008282018381101561037e5760405162461bcd60e51b815260040161037590613a5b565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f61565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f8d565b600082612f055750600061056c565b82600019148015612f195750600160ff1b82145b15612f365760405162461bcd60e51b815260040161037590613d58565b82820282848281612f4357fe5b051461037e5760405162461bcd60e51b815260040161037590613d58565b60008184841115612f855760405162461bcd60e51b81526004016103759190613917565b505050900390565b60008183612fae5760405162461bcd60e51b81526004016103759190613917565b506000838581612fba57fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b604080516080810190915260008082526020820190815260200160008152600060209091015290565b80356001600160a01b038116811461056c57600080fd5b80356009811061056c57600080fd5b803561056c81614052565b803561056c8161405f565b8035600d811061056c57600080fd5b80356013811061056c57600080fd5b8035601d811061056c57600080fd5b803561056c81614079565b60006080828403121561312b578081fd5b613135608061401a565b90508135815260208201356131498161405f565b6020820152604082013561315c81614052565b6040820152606082013561316f81614041565b606082015292915050565b60006060828403121561318b578081fd5b613195606061401a565b90508135815260208201356131a98161405f565b602082015260408201356131bc81614041565b604082015292915050565b600061078082840312156131d9578081fd5b50919050565b600061028082840312156131d9578081fd5b600060208284031215613202578081fd5b61037e83836130a6565b60006020828403121561321d578081fd5b813561037e81614041565b600060208284031215613239578081fd5b5035919050565b60008060008060808587031215613255578283fd5b8435935061326686602087016130bd565b9250604085013561327681614052565b9396929550929360600135925050565b6000806000806000610cc0868803121561329e578283fd5b853594506132af87602088016131c7565b93506132bf876107a088016131df565b9250610a208601356132d081614041565b91506132e087610a4088016131df565b90509295509295909350565b6000602082840312156132fd578081fd5b813561037e81614052565b600080600060c0848603121561331c578081fd5b833561332781614052565b92506020840135915061333d856040860161311a565b90509250925092565b600060208284031215613357578081fd5b61037e8383613100565b60008060408385031215613373578182fd5b823561337e8161406c565b946020939093013593505050565b60006020828403121561339d578081fd5b813561037e81614079565b6000608082840312156133b9578081fd5b61037e838361311a565b600061078082840312156133d5578081fd5b61037e83836131c7565b600080600080610a4085870312156133f5578182fd5b6133ff86866131c7565b935061340f8661078087016131df565b9396939550505050610a0082013591610a20013590565b60008060006107c0848603121561343b578081fd5b61344585856131c7565b9250610780840135915061333d856107a08601613100565b60008060006107c08486031215613472578081fd5b61347c85856131c7565b9561078085013595506107a0909401359392505050565b6000806000806107e085870312156134a9578182fd5b6134b386866131c7565b935061078085013592506107a085013591506107c08501356134d48161406c565b939692955090935050565b600061078082840312156134f1578081fd5b6105806134fd8161401a565b61350785856130f1565b815261351685602086016130cc565b602082015261352885604086016130e2565b604082015261353a85606086016130d7565b606082015261354c85608086016130bd565b608082015261355e8560a086016130cc565b60a08201526135708560c0860161310f565b60c08201526135828560e0860161310f565b60e0820152610100613596868287016130cc565b908201526101206135a9868683016130a6565b908201526101406135bc868683016130a6565b90820152610160848101359082015261018080850135908201526101a080850135908201526101c080850135908201526101e08085013590820152610200808501359082015261022080850135908201526102408085013590820152610260808501359082015261028080850135908201526102a080850135908201526102c080850135908201526102e08085013590820152610300808501359082015261032080850135908201526103408085013590820152610360808501359082015261038080850135908201526103a080850135908201526103c080850135908201526103e08085013590820152610400808501359082015261042080850135908201526104408085013590820152610460808501359082015261048080850135908201526104a080850135908201526104c06136f88682870161317a565b9082015261052061370b8686830161317a565b6104e083015261371d8684870161311a565b61050083015261373186610600870161311a565b9082015261374385610680860161311a565b61054082015261375785610700860161311a565b610560820152949350505050565b6000610280808385031215613778578182fd5b6137818161401a565b61378b85856130d7565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215613255578182fd5b6006811061388157fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156138bd578351835292840192918401916001016138a1565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106138eb57fe5b91905290565b60208101600283106138eb57fe5b60408101601d841061390d57fe5b9281526020015290565b6000602080835283518082850152825b8181101561394357858101830151858201604001528201613927565b818111156139545783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f50414d456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526036908201527f50414d456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b600061028082019050613f49828451613877565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561403957600080fd5b604052919050565b801515811461404f57600080fd5b50565b6002811061404f57600080fd5b6006811061404f57600080fd5b601d811061404f57600080fd5b6004811061404f57600080fdfea2646970667358221220fbd1f85e87ae8950e32f10e7533bb5e4a21a2781f675ff255ab07b5b658b475a64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063e8d0c6721461028f578063edc0465f14610219578063f5586e05146102a257610121565b8063aaf5eb6814610211578063c40c5a9814610219578063cb2ef6f714610221578063dceda25414610236578063dd37acde1461025657610121565b80636942d1a8116100f45780636942d1a8146101a25780636f37e55b146101b557806372540003146101bd578063811322fb146101de578063931172d1146101f157610121565b8063179331f3146101265780631a2e165d1461014f5780634c7c3fd61461016f5780635ada17d81461018f575b600080fd5b610139610134366004613308565b6102b5565b60405161014691906138f1565b60405180910390f35b61016261015d366004613240565b610385565b60405161014691906138d4565b61018261017d3660046133c3565b6103ac565b6040516101469190613f35565b61016261019d3660046133df565b610424565b6101826101b03660046133df565b6104f9565b610162610529565b6101d06101cb366004613228565b610535565b6040516101469291906138ff565b6101626101ec366004613346565b61055e565b6102046101ff366004613493565b610572565b6040516101469190613885565b610162610ad7565b610162610adc565b610229610ae1565b60405161014691906138dd565b610249610244366004613286565b610ae6565b60405161014691906138c9565b610162610264366004613426565b610af1565b610162610277366004613361565b610dbf565b61016261028a366004613862565b610ddd565b61020461029d36600461345d565b610f29565b6101626102b0366004613862565b61109c565b600060018460018111156102c557fe5b1415610341576102d483611107565b6102dd84611129565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b815260040161037590613e42565b60405180910390fd5b9392505050565b60008061039186610535565b9150506103a081868686610ddd565b9150505b949350505050565b6103b4612fc4565b6103bc612fc4565b60008152670de0b6b3a764000061018082018190526101608201526101a083013560208201526101e083013560608201526102c083013560e08201526102e08301356101408201526103008301356101008201526103a083013561012082015290505b919050565b600080610439610160870161014088016131f1565b6001600160a01b031614158015610484575061045d610160860161014087016131f1565b6001600160a01b0316610478610140870161012088016131f1565b6001600160a01b031614155b156104c8576104c1826104b561049f368990038901896134df565b6104ae36899003890189613765565b8787611138565b9063ffffffff61130616565b90506103a4565b6104f06104da368790038701876134df565b6104e936879003870187613765565b8585611138565b95945050505050565b610501612fc4565b6104f0610513368790038701876134df565b61052236879003870187613765565b85856113a4565b670de0b6b3a764000081565b6000808060f884901c601c81111561054957fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561056c57fe5b92915050565b606061057c61305e565b6000600984601c81111561058c57fe5b141561069a576102408701351561069a576105a561305e565b6105e06102408901356101e08a01356105c7368c90038c016105808d016133a8565b6105d760c08d0160a08e016132ec565b60018c8c611575565b905060005b60788160ff16101561069757818160ff166078811061060057fe5b602002015161060e57610697565b886102200135828260ff166078811061062357fe5b6020020151116106325761068f565b610650828260ff166078811061064457fe5b6020020151898961175f565b6106595761068f565b6106776009838360ff166078811061066d57fe5b6020020151610dbf565b84846078811061068357fe5b60200201526001909201915b6001016105e5565b50505b600a84601c8111156106a857fe5b14156107ad57610240870135158015906106c6575061022087013515155b156107ad576106d361307d565b6106e63689900389016105808a016133a8565b6001604082015290506106f761305e565b6107206102408a01356102208b01358461071760c08e0160a08f016132ec565b60018d8d611575565b905060005b60788160ff1610156107a957818160ff166078811061074057fe5b602002015161074e576107a9565b61076c828260ff166078811061076057fe5b60200201518a8a61175f565b610775576107a1565b610789600a838360ff166078811061066d57fe5b85856078811061079557fe5b60200201526001909301925b600101610725565b5050505b600d84601c8111156107bb57fe5b141561088f576102608701351561088f576107d461305e565b61080f6102608901356101e08a01356107f6368c90038c016106008d016133a8565b61080660c08d0160a08e016132ec565b60008c8c611575565b905060005b60788160ff16101561088c57818160ff166078811061082f57fe5b602002015161083d5761088c565b61084f828260ff166078811061064457fe5b61085857610884565b61086c600d838360ff166078811061066d57fe5b84846078811061087857fe5b60200201526001909201915b600101610814565b50505b600384601c81111561089d57fe5b1415610958576102a087013515610958576108b661305e565b6108d86102a08901356101e08a01356105c7368c90038c016107008d016133a8565b905060005b60788160ff16101561095557818160ff16607881106108f857fe5b602002015161090657610955565b610918828260ff166078811061064457fe5b6109215761094d565b6109356003838360ff166078811061066d57fe5b84846078811061094157fe5b60200201526001909201915b6001016108dd565b50505b601284601c81111561096657fe5b1415610a4a57600061097e60e0890160c08a0161338c565b600381111561098957fe5b1415801561099b575061028087013515155b15610a4a576109a861305e565b6109ca6102808901356101e08a01356105c7368c90038c016106808d016133a8565b905060005b60788160ff161015610a4757818160ff16607881106109ea57fe5b60200201516109f857610a47565b610a0a828260ff166078811061064457fe5b610a1357610a3f565b610a276012838360ff166078811061066d57fe5b848460788110610a3357fe5b60200201526001909201915b6001016109cf565b50505b60608167ffffffffffffffff81118015610a6357600080fd5b50604051908082528060200260200182016040528015610a8d578160200160208202803683370190505b50905060005b82811015610acb57838160788110610aa757fe5b6020020151828281518110610ab857fe5b6020908102919091010152600101610a93565b50979650505050505050565b601281565b607881565b600090565b600195945050505050565b6000600982601c811115610b0157fe5b1415610ba157610b1961060085016105e0860161320c565b15156001148015610b2e575061024084013515155b15610ba1576000610b67610b4b36879003870161058088016133a8565b610b5b60c0880160a089016132ec565b8761024001358761178e565b905080610b7857506000905061037e565b8461022001358111610b8e57506000905061037e565b610b99600982610dbf565b91505061037e565b600a82601c811115610baf57fe5b1415610c3f5761024084013515801590610bcd575061022084013515155b15610c3f57610bda61307d565b610bed36869003860161058087016133a8565b6001604082015290506000610c1882610c0c60c0890160a08a016132ec565b8861024001358861178e565b905080610c2b57506000915061037e9050565b610c36600a82610dbf565b9250505061037e565b600d82601c811115610c4d57fe5b1415610cae5761026084013515610cae576000610c92610c7636879003870161060088016133a8565b610c8660c0880160a089016132ec565b8761026001358761178e565b905080610ca357506000905061037e565b610b99600d82610dbf565b600382601c811115610cbc57fe5b1415610d1d576102a084013515610d1d576000610d01610ce536879003870161070088016133a8565b610cf560c0880160a089016132ec565b876102a001358761178e565b905080610d1257506000905061037e565b610b99600382610dbf565b601282601c811115610d2b57fe5b1415610db5576000610d4360e0860160c0870161338c565b6003811115610d4e57fe5b14158015610d60575061028084013515155b15610db5576000610d99610d7d36879003870161068088016133a8565b610d8d60c0880160a089016132ec565b8761028001358761178e565b905080610daa57506000905061037e565b610b99601282610dbf565b5060009392505050565b60008160f884601c811115610dd057fe5b60ff16901b179392505050565b600081851415610dee5750836103a4565b6001846008811115610dfc57fe5b1480610e1357506003846008811115610e1157fe5b145b15610e22576104c185846117e9565b6002846008811115610e3057fe5b1480610e4757506004846008811115610e4557fe5b145b15610e8b576000610e5886856117e9565b9050610e6386611845565b610e6c82611845565b1415610e795790506103a4565b610e83868561185c565b9150506103a4565b6005846008811115610e9957fe5b1480610eb057506007846008811115610eae57fe5b145b15610ebf576104c1858461185c565b6006846008811115610ecd57fe5b1480610ee457506008846008811115610ee257fe5b145b15610f20576000610ef5868561185c565b9050610f0086611845565b610f0982611845565b1415610f165790506103a4565b610e8386856117e9565b50929392505050565b6060610f3361305e565b6000610200860135158015610f535750610f53866101c00135868661175f565b15610f8157610f686002876101c00135610dbf565b828261ffff1660788110610f7857fe5b60200201526001015b61020086013515610fca57610f9c866102000135868661175f565b15610fca57610fb1600f876102000135610dbf565b828261ffff1660788110610fc157fe5b60200201526001015b610fda866101e00135868661175f565b1561100857610fef6014876101e00135610dbf565b828261ffff1660788110610fff57fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561102557600080fd5b5060405190808252806020026020018201604052801561104f578160200160208202803683370190505b50905060005b8261ffff168110156110915783816078811061106d57fe5b602002015182828151811061107e57fe5b6020908102919091010152600101611055565b509695505050505050565b600060038460088111156110ac57fe5b14806110c3575060048460088111156110c157fe5b145b806110d9575060078460088111156110d757fe5b145b806110ef575060088460088111156110ed57fe5b145b156110fb5750836103a4565b6104f085858585610ddd565b6000808061111a62015180855b046118aa565b50915091506103a48282611940565b60006103a46201518083611114565b600080600061114685610535565b9092509050601c82601c81111561115957fe5b141561116a576000925050506103a4565b600a82601c81111561117857fe5b1415611189576000925050506103a4565b600c82601c81111561119757fe5b14156111a8576000925050506103a4565b600d82601c8111156111b657fe5b14156111c7576000925050506103a4565b601282601c8111156111d557fe5b14156111e6576000925050506103a4565b600b82601c8111156111f457fe5b1415611205576000925050506103a4565b600382601c81111561121357fe5b141561122e57611225878783876119c6565b925050506103a4565b600282601c81111561123c57fe5b141561124e5761122587878387611a80565b600982601c81111561125c57fe5b141561126e5761122587878387611abe565b600882601c81111561127c57fe5b141561128e5761122587878387611b2d565b601482601c81111561129c57fe5b14156112ae5761122587878387611b4e565b600782601c8111156112bc57fe5b14156112ce5761122587878387611b6c565b601182601c8111156112dc57fe5b14156112ee5761122587878387611c23565b60405162461bcd60e51b815260040161037590613bc0565b6000821580611313575081155b156113205750600061056c565b826000191480156113345750600160ff1b82145b156113515760405162461bcd60e51b815260040161037590613b79565b8282028284828161135e57fe5b051461137c5760405162461bcd60e51b815260040161037590613b79565b670de0b6b3a76400008105806103a45760405162461bcd60e51b815260040161037590613a92565b6113ac612fc4565b6000806113b885610535565b9092509050601c82601c8111156113cb57fe5b14156113dd5761122587878387611cad565b600382601c8111156113eb57fe5b14156113fd5761122587878387611d4c565b600282601c81111561140b57fe5b141561141d5761122587878387611db6565b600a82601c81111561142b57fe5b141561143d5761122587878387611dfd565b600982601c81111561144b57fe5b141561145d5761122587878387611e8f565b600882601c81111561146b57fe5b141561147d5761122587878387611cad565b601482601c81111561148b57fe5b141561149d5761122587878387611ee8565b600782601c8111156114ab57fe5b14156114bd5761122587878387611cad565b600c82601c8111156114cb57fe5b14156114dd5761122587878387611f80565b600d82601c8111156114eb57fe5b14156114fd576112258787838761201c565b601282601c81111561150b57fe5b141561151d576112258787838761216d565b601182601c81111561152b57fe5b141561153d5761122587878387612270565b600b82601c81111561154b57fe5b141561155d57611225878783876122a7565b60405162461bcd60e51b815260040161037590613d02565b61157d61305e565b61158561305e565b60608701516000906115ed5761159c8a868661175f565b156115b757898282607881106115ae57fe5b60200201526001015b6115c289868661175f565b156115e557600186151514156115e557888282607881106115df57fe5b60200201525b509050611754565b896000806115fc8a848d6102b5565b90505b8b8310156116915761161283898961175f565b1561165057607684106116375760405162461bcd60e51b81526004016103759061396a565b8285856078811061164457fe5b60200201526001909301925b60019182019181600181111561166257fe5b14611677576116728b8e84612392565b61168a565b61168a6116858c8f85612392565b6124c3565b92506115ff565b600189151514156116bf576116a78c898961175f565b156116bf578b8585607881106116b957fe5b60200201525b6000841180156116dc57506116dc85600186036078811061064457fe5b1561174c5760008b6040015160018111156116f357fe5b1480156117005750600184115b801561170c5750828c14155b1561174c5784846078811061171d57fe5b602002015185600186036078811061173157fe5b602002015284846078811061174257fe5b6020020160008152505b509293505050505b979650505050505050565b6000818311156117715750600061037e565b8383111580156117815750818411155b15610db55750600161037e565b606084015160009015806117a0575081155b156117ac5750816103a4565b60016117b98585886102b5565b60018111156117c457fe5b146117da576117d585836001612392565b6104f0565b6104f061168586846001612392565b600060018260018111156117f957fe5b141561183e57611808836124fc565b600614156118225761181b83600261250f565b905061056c565b61182b836124fc565b6007141561183e5761181b83600161250f565b5090919050565b60006118546201518083611114565b509392505050565b6000600182600181111561186c57fe5b141561183e5761187b836124fc565b6006141561188e5761181b836001612524565b611897836124fc565b6007141561183e5761181b836002612524565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161190157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806119515750816003145b8061195c5750816005145b806119675750816007145b806119725750816008145b8061197d575081600a145b80611988575081600c145b156119955750601f61056c565b816002146119a55750601e61056c565b6119ae83612539565b6119b957601c6119bc565b601d5b60ff169392505050565b60008085610100015160018111156119da57fe5b14156119fe578461038001516119f3866040015161255e565b60000b0290506103a4565b6000611a49611a208660200151886080015189602001518a6101e0015161109c565b611a398689608001518a602001518b6101e0015161109c565b8860600151896101e00151612622565b90506103a0611a6e8660e001516104b58961038001518561130690919063ffffffff16565b6101208701519063ffffffff61271f16565b6000611a9f856104000151866102c0015161271f90919063ffffffff16565b611aac866040015161255e565b6000190260000b029050949350505050565b600080611ae1611a208660200151886080015189602001518a6101e0015161109c565b90506103a0611b1b611b098760e001516104b58961014001518661130690919063ffffffff16565b6101008801519063ffffffff61271f16565b6101608701519063ffffffff61130616565b60008360e00151611b41866040015161255e565b60000b0295945050505050565b60006104f08460e0015185610180015161130690919063ffffffff16565b600080611b8f611a208660200151886080015189602001518a6101e0015161109c565b905060018660e001516003811115611ba357fe5b1415611bc857856103c00151611bbc876040015161255e565b60000b029150506103a4565b60028660e001516003811115611bda57fe5b1415611c0d57611c008560e001516104b5886103c001518461130690919063ffffffff16565b611bbc876040015161255e565b60e0850151611c0090829063ffffffff61130616565b600080611c46611a208660200151886080015189602001518a6101e0015161109c565b9050611c92611c6b8660e001516104b58861014001518561130690919063ffffffff16565b610100870151610420890151611c869163ffffffff61271f16565b9063ffffffff61271f16565b611c9f876040015161255e565b60000b029695505050505050565b611cb5612fc4565b6000611cd7611a208660200151886080015189602001518a6101e0015161109c565b9050611d0e611cfc826104b58860e0015189610140015161130690919063ffffffff16565b6101008701519063ffffffff61271f16565b61010086015260e0850151610380870151611d3991611a6e9184916104b5919063ffffffff61130616565b6101208601525050506020820152919050565b611d54612fc4565b6000611d76611a208660200151886080015189602001518a6101e0015161109c565b9050611d9b611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015250506000610120840152506020820152919050565b611dbe612fc4565b846102c00151611dd1866040015161255e565b60000b0260e085015250506102e083015161014083015260208201526103009091015161010082015290565b611e05612fc4565b6000611e27611a208660200151886080015189602001518a6101e0015161109c565b9050611e60611e4f611b09836104b58960e001518a610140015161130690919063ffffffff16565b60e08701519063ffffffff61271f16565b60e086018190526000610100870152610380870151611d3991611a6e9184916104b5919063ffffffff61130616565b611e97612fc4565b6000611eb9611a208660200151886080015189602001518a6101e0015161109c565b600061010087015260e0860151610380880151919250611d3991611a6e9184916104b59163ffffffff61130616565b611ef0612fc4565b6000611f12611a208660200151886080015189602001518a6101e0015161109c565b9050611f37611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e0850151610380870151611f6291611a6e9184916104b5919063ffffffff61130616565b6101208601525050600060e084015250600482526020820152919050565b611f88612fc4565b6000611faa611a208660200151886080015189602001518a6101e0015161109c565b9050611fcf611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e0850151610380870151611ffa91611a6e9184916104b5919063ffffffff61130616565b6101208601525050506103609290920151610140820152602081019190915290565b612024612fc4565b61034085015161032086015160009161204891611c8690869063ffffffff61130616565b905060006120648661014001518361276590919063ffffffff16565b9050612093876104800151612087896104a00151846127ab90919063ffffffff16565b9063ffffffff6127bb16565b6101408701519091506120ac908263ffffffff61271f16565b91506120cf876104400151612087896104600151856127ab90919063ffffffff16565b9150600061211c6120f388602001518a608001518b602001518c6101e0015161109c565b61210c888b608001518c602001518d6101e0015161109c565b8a606001518b6101e00151612622565b9050612153612141826104b58a60e001518b610140015161130690919063ffffffff16565b6101008901519063ffffffff61271f16565b610100880152505061014085015250506020820152919050565b612175612fc4565b6000612197611a208660200151886080015189602001518a6101e0015161109c565b90506121bc611cfc826104b58860e0015189610140015161130690919063ffffffff16565b61010086015260e08501516103808701516121e791611a6e9184916104b5919063ffffffff61130616565b61012086015260018660c0015160038111156121ff57fe5b148061221a575060038660c00151600381111561221857fe5b145b156122285760006101608601525b60028660c00151600381111561223a57fe5b1480612255575060038660c00151600381111561225357fe5b145b156122635760006101808601525b5050506020820152919050565b612278612fc4565b5050600060e0830181905261014083018190526101008301819052610120830152600582526020820152919050565b6122af612fc4565b600084604001516000146122c75784604001516122e0565b6122e08487608001518860200151896101e00151610ddd565b6104c08701516040015190915083906000901561231b576000612308896104c00151856127cb565b905080831161231957600180895291505b505b876104e0015160400151801561232f575080155b1561235e576000612345896104e00151856127cb565b9050808311612357576002885261235c565b600388525b505b6040870151612386576123808689608001518a602001518b6101e00151610ddd565b60408801525b50949695505050505050565b60008080856020015160058111156123a657fe5b14156123c15784516104c1908590850263ffffffff61250f16565b6001856020015160058111156123d357fe5b14156123f15784516104c1908590850260070263ffffffff61250f16565b60028560200151600581111561240357fe5b141561241e5784516104c1908590850263ffffffff6128f716565b60038560200151600581111561243057fe5b141561244e5784516104c1908590850260030263ffffffff6128f716565b60048560200151600581111561246057fe5b141561247e5784516104c1908590850260060263ffffffff6128f716565b60058560200151600581111561249057fe5b14156124ab5784516104c1908590850263ffffffff61297116565b60405162461bcd60e51b8152600401610375906139b8565b6000806000806124d285612998565b9194509250905060006124e58484611940565b90506124f28484836129b6565b9695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561056c57600080fd5b62015180810282038281111561056c57600080fd5b60006004820615801561254e57506064820615155b8061056c57505061019090061590565b60008082600c81111561256d57fe5b141561257b5750600161041f565b600182600c81111561258957fe5b1415612598575060001961041f565b600682600c8111156125a657fe5b14156125b45750600161041f565b600782600c8111156125c257fe5b14156125d1575060001961041f565b600282600c8111156125df57fe5b14156125ed5750600161041f565b600382600c8111156125fb57fe5b141561260a575060001961041f565b60405162461bcd60e51b815260040161037590613b25565b6000848410156126445760405162461bcd60e51b815260040161037590613cbb565b600083600581111561265257fe5b1415612662576104c185856129d0565b600183600581111561267057fe5b1415612680576104c18585612ae4565b600283600581111561268e57fe5b141561269e576104c18585612b0f565b60048360058111156126ac57fe5b14156126bc576104c18585612b2e565b60038360058111156126ca57fe5b14156126db576104c1858584612bef565b60058360058111156126e957fe5b14156127075760405162461bcd60e51b815260040161037590613c0d565b60405162461bcd60e51b815260040161037590613a06565b60008282018183128015906127345750838112155b80612749575060008312801561274957508381125b61037e5760405162461bcd60e51b815260040161037590613ae4565b600081830381831280159061277a5750838113155b8061278f575060008312801561278f57508381135b61037e5760405162461bcd60e51b815260040161037590613ead565b60008183121561183e5750919050565b60008183131561183e578161037e565b60008080846020015160058111156127df57fe5b14156127ff5783516127f890849063ffffffff61250f16565b905061037e565b60018460200151600581111561281157fe5b141561282d5783516127f890849060070263ffffffff61250f16565b60028460200151600581111561283f57fe5b14156128585783516127f890849063ffffffff6128f716565b60038460200151600581111561286a57fe5b14156128865783516127f890849060030263ffffffff6128f716565b60048460200151600581111561289857fe5b14156128b45783516127f890849060060263ffffffff6128f716565b6005846020015160058111156128c657fe5b14156128df5783516127f890849063ffffffff61297116565b60405162461bcd60e51b815260040161037590613de5565b60008080806129096201518087611114565b600c9188016000198101838104949094019650945092509006600101915060006129338484611940565b905080821115612941578091505b62015180870662015180612956868686612cc5565b020194508685101561296757600080fd5b5050505092915050565b60008080806129836201518087611114565b91870194509250905060006129338484611940565b600080806129a96201518085611114565b9196909550909350915050565b6000620151806129c7858585612cc5565b02949350505050565b6000806129dc84612d41565b905060006129e984612d41565b905060006129f686612d59565b612a025761016d612a06565b61016e5b61ffff16905081831415612a3857612a2e81612a228888612d76565b9063ffffffff612d9116565b935050505061056c565b6000612a4386612d59565b612a4f5761016d612a53565b61016e5b61ffff1690506000612a8483612a228a612a7f612a778a600163ffffffff612e4d16565b6001806129b6565b612d76565b90506000612aa183612a22612a9b886001806129b6565b8b612d76565b9050612ad7612ac76001612abb888a63ffffffff612e7216565b9063ffffffff612e7216565b611c86848463ffffffff61271f16565b9998505050505050505050565b600061037e610168612a2262015180612b03868863ffffffff612e7216565b9063ffffffff612eb416565b600061037e61016d612a2262015180612b03868863ffffffff612e7216565b6000806000806000806000612b4289612998565b975095509350612b5188612998565b945092509050601f861415612b6557601e95505b82601f1415612b7357601e92505b6000612b85848863ffffffff61276516565b90506000612b99848863ffffffff61276516565b90506000612bad848863ffffffff61276516565b9050612bdf610168612a2285611c86612bcd87601e63ffffffff612ef616565b611c868761016863ffffffff612ef616565b9c9b505050505050505050505050565b6000806000806000806000612c038a612998565b975095509350612c1289612998565b945092509050612c218a611107565b861415612c2d57601e95505b8789148015612c3c5750816002145b158015612c505750612c4d89611107565b83145b15612c5a57601e92505b6000612c6c848863ffffffff61276516565b90506000612c80848863ffffffff61276516565b90506000612c94848863ffffffff61276516565b9050612cb4610168612a2285611c86612bcd87601e63ffffffff612ef616565b9d9c50505050505050505050505050565b60006107b2841015612cd657600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281612d1257fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000612d506201518083611114565b50909392505050565b600080612d696201518084611114565b5050905061037e81612539565b600081831115612d8557600080fd5b50620151809190030490565b600081612db05760405162461bcd60e51b815260040161037590613ef1565b82612dbd5750600061056c565b670de0b6b3a764000083810290848281612dd357fe5b0514612df15760405162461bcd60e51b815260040161037590613d9f565b82600019148015612e055750600160ff1b84145b15612e225760405162461bcd60e51b815260040161037590613d9f565b6000838281612e2d57fe5b059050806103a45760405162461bcd60e51b815260040161037590613c6a565b60008282018381101561037e5760405162461bcd60e51b815260040161037590613a5b565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f61565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f8d565b600082612f055750600061056c565b82600019148015612f195750600160ff1b82145b15612f365760405162461bcd60e51b815260040161037590613d58565b82820282848281612f4357fe5b051461037e5760405162461bcd60e51b815260040161037590613d58565b60008184841115612f855760405162461bcd60e51b81526004016103759190613917565b505050900390565b60008183612fae5760405162461bcd60e51b81526004016103759190613917565b506000838581612fba57fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b604080516080810190915260008082526020820190815260200160008152600060209091015290565b80356001600160a01b038116811461056c57600080fd5b80356009811061056c57600080fd5b803561056c81614052565b803561056c8161405f565b8035600d811061056c57600080fd5b80356013811061056c57600080fd5b8035601d811061056c57600080fd5b803561056c81614079565b60006080828403121561312b578081fd5b613135608061401a565b90508135815260208201356131498161405f565b6020820152604082013561315c81614052565b6040820152606082013561316f81614041565b606082015292915050565b60006060828403121561318b578081fd5b613195606061401a565b90508135815260208201356131a98161405f565b602082015260408201356131bc81614041565b604082015292915050565b600061078082840312156131d9578081fd5b50919050565b600061028082840312156131d9578081fd5b600060208284031215613202578081fd5b61037e83836130a6565b60006020828403121561321d578081fd5b813561037e81614041565b600060208284031215613239578081fd5b5035919050565b60008060008060808587031215613255578283fd5b8435935061326686602087016130bd565b9250604085013561327681614052565b9396929550929360600135925050565b6000806000806000610cc0868803121561329e578283fd5b853594506132af87602088016131c7565b93506132bf876107a088016131df565b9250610a208601356132d081614041565b91506132e087610a4088016131df565b90509295509295909350565b6000602082840312156132fd578081fd5b813561037e81614052565b600080600060c0848603121561331c578081fd5b833561332781614052565b92506020840135915061333d856040860161311a565b90509250925092565b600060208284031215613357578081fd5b61037e8383613100565b60008060408385031215613373578182fd5b823561337e8161406c565b946020939093013593505050565b60006020828403121561339d578081fd5b813561037e81614079565b6000608082840312156133b9578081fd5b61037e838361311a565b600061078082840312156133d5578081fd5b61037e83836131c7565b600080600080610a4085870312156133f5578182fd5b6133ff86866131c7565b935061340f8661078087016131df565b9396939550505050610a0082013591610a20013590565b60008060006107c0848603121561343b578081fd5b61344585856131c7565b9250610780840135915061333d856107a08601613100565b60008060006107c08486031215613472578081fd5b61347c85856131c7565b9561078085013595506107a0909401359392505050565b6000806000806107e085870312156134a9578182fd5b6134b386866131c7565b935061078085013592506107a085013591506107c08501356134d48161406c565b939692955090935050565b600061078082840312156134f1578081fd5b6105806134fd8161401a565b61350785856130f1565b815261351685602086016130cc565b602082015261352885604086016130e2565b604082015261353a85606086016130d7565b606082015261354c85608086016130bd565b608082015261355e8560a086016130cc565b60a08201526135708560c0860161310f565b60c08201526135828560e0860161310f565b60e0820152610100613596868287016130cc565b908201526101206135a9868683016130a6565b908201526101406135bc868683016130a6565b90820152610160848101359082015261018080850135908201526101a080850135908201526101c080850135908201526101e08085013590820152610200808501359082015261022080850135908201526102408085013590820152610260808501359082015261028080850135908201526102a080850135908201526102c080850135908201526102e08085013590820152610300808501359082015261032080850135908201526103408085013590820152610360808501359082015261038080850135908201526103a080850135908201526103c080850135908201526103e08085013590820152610400808501359082015261042080850135908201526104408085013590820152610460808501359082015261048080850135908201526104a080850135908201526104c06136f88682870161317a565b9082015261052061370b8686830161317a565b6104e083015261371d8684870161311a565b61050083015261373186610600870161311a565b9082015261374385610680860161311a565b61054082015261375785610700860161311a565b610560820152949350505050565b6000610280808385031215613778578182fd5b6137818161401a565b61378b85856130d7565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215613255578182fd5b6006811061388157fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156138bd578351835292840192918401916001016138a1565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106138eb57fe5b91905290565b60208101600283106138eb57fe5b60408101601d841061390d57fe5b9281526020015290565b6000602080835283518082850152825b8181101561394357858101830151858201604001528201613927565b818111156139545783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f50414d456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526036908201527f50414d456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b600061028082019050613f49828451613877565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561403957600080fd5b604052919050565b801515811461404f57600080fd5b50565b6002811061404f57600080fd5b6006811061404f57600080fd5b601d811061404f57600080fd5b6004811061404f57600080fdfea2646970667358221220fbd1f85e87ae8950e32f10e7533bb5e4a21a2781f675ff255ab07b5b658b475a64736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
