{
  "_format": "hh-sol-artifact-1",
  "contractName": "SomaStarter",
  "sourceName": "contracts/soma/SomaStarter/SomaStarter.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "address_",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        }
      ],
      "name": "AccountLimitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FeeWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mantissa",
          "type": "uint256"
        }
      ],
      "name": "ImmediatelyUnlockingPartUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startsAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unlockingPart",
          "type": "uint256"
        }
      ],
      "name": "IntervalCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "IntervalPoolUnlocking",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "IssuanceIncreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LinearPoolUnlocking",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "LinearUnlockingEndingTimestampUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newLimit",
          "type": "uint256"
        }
      ],
      "name": "PaymentLimitChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "PaymentLimitCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unlockedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collectedFee",
          "type": "uint256"
        }
      ],
      "name": "PaymentUnlocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PaymentsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum SomaStarter.Type",
          "name": "type_",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "issuanceToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "issuanceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startsAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endsAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paymentLimit",
          "type": "uint256"
        }
      ],
      "name": "PoolCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "PoolOwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "nominatedOwner",
          "type": "address"
        }
      ],
      "name": "PoolOwnerNominated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newRequiredPrivileges",
          "type": "bytes32"
        }
      ],
      "name": "PoolPrivilegesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "requestedPaymentAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paymentAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "issuanceAmount",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TokensRecovered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "UnsoldWithdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GLOBAL_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_WHITELIST_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_WHITELIST_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_RECOVERY_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "acceptPoolOwnership",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newLimit",
          "type": "uint256"
        }
      ],
      "name": "changeLimit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "collectFee",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "collectedFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "paymentLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "requiredPrivileges",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "mantissa",
              "type": "uint256"
            }
          ],
          "internalType": "struct AttoDecimal.Instance",
          "name": "immediatelyUnlockingPart",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "unlockingPart",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Interval[]",
          "name": "intervals",
          "type": "tuple[]"
        }
      ],
      "name": "createIntervalPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "paymentLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "requiredPrivileges",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "mantissa",
              "type": "uint256"
            }
          ],
          "internalType": "struct AttoDecimal.Instance",
          "name": "immediatelyUnlockingPart",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "linearUnlockingEndsAt",
          "type": "uint256"
        }
      ],
      "name": "createLinearPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "createPaymentLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "paymentLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "requiredPrivileges",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "name": "createSimplePool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "increaseIssuance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "address_",
          "type": "address"
        }
      ],
      "name": "intervalPoolAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "limitIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "paymentSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.AccountState",
          "name": "state",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "withdrawnIssuanceAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.ComplexAccountState",
          "name": "complex",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "unlockedIntervalsCount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "intervalPoolProps",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "mantissa",
              "type": "uint256"
            }
          ],
          "internalType": "struct AttoDecimal.Instance",
          "name": "immediatelyUnlockingPart",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "unlockingPart",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Interval[]",
          "name": "intervals",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "address_",
          "type": "address"
        }
      ],
      "name": "linearPoolAccount",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "limitIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "paymentSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.AccountState",
          "name": "state",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "withdrawnIssuanceAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.ComplexAccountState",
          "name": "complex",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "immediatelyUnlockedAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "linearPoolProps",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "mantissa",
              "type": "uint256"
            }
          ],
          "internalType": "struct AttoDecimal.Instance",
          "name": "immediatelyUnlockingPart",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.LinearProps",
          "name": "linear",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "nominatedOwner_",
          "type": "address"
        }
      ],
      "name": "nominateNewPoolOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "address_",
          "type": "address"
        }
      ],
      "name": "poolAccount",
      "outputs": [
        {
          "internalType": "enum SomaStarter.Type",
          "name": "type_",
          "type": "uint8"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "limitIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "paymentSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct SomaStarter.AccountState",
          "name": "state",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "poolProps",
      "outputs": [
        {
          "internalType": "enum SomaStarter.Type",
          "name": "type_",
          "type": "uint8"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "issuanceLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "startsAt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endsAt",
              "type": "uint256"
            },
            {
              "internalType": "contract IERC20",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "issuanceToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "fee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "mantissa",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttoDecimal.Instance",
              "name": "rate",
              "type": "tuple"
            }
          ],
          "internalType": "struct SomaStarter.Props",
          "name": "props",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "poolState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "available",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issuance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lockedPayments",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "unlockedPayments",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "nominatedOwner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "paymentLimits",
              "type": "uint256[]"
            },
            {
              "internalType": "bytes32",
              "name": "requiredPrivileges",
              "type": "bytes32"
            }
          ],
          "internalType": "struct SomaStarter.State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolsCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "recoverTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitIndex",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        }
      ],
      "name": "setAccountsLimit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requestedPaymentAmount",
          "type": "uint256"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "paymentAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "issuanceAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "intervalIndex",
          "type": "uint256"
        }
      ],
      "name": "unlockInterval",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "withdrawnIssuanceAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "unlockLinear",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "withdrawalAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "newRequiredPrivileges",
          "type": "bytes32"
        }
      ],
      "name": "updateRequiredPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawFee",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "withdrawPayments",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "poolIndex",
          "type": "uint256"
        }
      ],
      "name": "withdrawUnsold",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf60805234801561002857600080fd5b506001600055608051614bb9610081600039600081816103ce015281816108d801528181610bdb01528181610c7701528181610f1c015281816115c7015281816116630152818161174601526122170152614bb96000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80638456cb5911610146578063b333ad87116100c3578063e2481dbd11610087578063e2481dbd146105d6578063e43b1560146105e0578063ee90ac8214610601578063f0f2192014610614578063f63d8d3214610627578063f6f94e2c1461063a57600080fd5b8063b333ad871461051c578063c879c6d81461052f578063ceec13ff14610542578063d869759814610587578063d96073cf146105ae57600080fd5b8063a123ada71161010a578063a123ada7146104b0578063a90101fb146104c3578063a969ff0a146104d6578063ac9650d8146104e9578063ae4ff9dc1461050957600080fd5b80638456cb59146104585780638c788de01461046057806391d148541461046957806398ecde321461047c5780639a419e2e1461049d57600080fd5b806346f75858116101d457806363727fc21161019857806363727fc2146103c957806366258068146104085780636ccc56cd1461041d57806376d6ffa11461043d5780638129fc1c1461045057600080fd5b806346f758581461037c57806348796f3a1461038f5780634fdf5539146103995780635c975abb146103ae5780635f3e849f146103b657600080fd5b806326338c611161021b57806326338c61146103005780632e2ec9e6146103135780632f9afafc1461033d5780633f4ba83a1461035f57806341975af81461036957600080fd5b806301ffc9a714610258578063059332ec146102805780631cead9a7146102a257806323fc3136146102da578063248a9ca3146102ed575b600080fd5b61026b610266366004613f2e565b61064d565b60405190151581526020015b60405180910390f35b61029361028e366004613f58565b610678565b60405161027793929190613fc5565b6102cc6102b0366004614008565b6001600160a01b03166000908152610165602052604090205490565b604051908152602001610277565b61026b6102e83660046140b9565b610759565b6102cc6102fb366004613f58565b6108d4565b61026b61030e36600461416d565b6109c6565b610326610321366004614277565b610a26565b604080519215158352602083019190915201610277565b61035061034b366004613f58565b610a9c565b604051610277939291906142c3565b610367610bca565b005b61026b610377366004613f58565b610d59565b61026b61038a366004613f58565b610e38565b6102cc6101635481565b6102cc600080516020614b4683398151915281565b61026b610f18565b6103676103c4366004614330565b610fb1565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610277565b6102cc600080516020614b6683398151915281565b61043061042b366004613f58565b611122565b60405161027791906143ac565b6102cc61044b366004613f58565b611229565b610367611413565b6103676115b6565b610164546102cc565b61026b610477366004614429565b611742565b61048f61048a366004613f58565b611840565b604051610277929190614491565b6102cc6104ab36600461416d565b6118d4565b6103266104be3660046144ad565b611988565b61026b6104d1366004614429565b611ac3565b61026b6104e4366004613f58565b611bb1565b6104fc6104f7366004614515565b611c15565b60405161027791906145da565b61026b610517366004613f58565b611d03565b61026b61052a36600461416d565b611e09565b61026b61053d36600461463c565b611f98565b610555610550366004614429565b6120b3565b60408051845181526020948501518582015283519181019190915292909101516060830152608082015260a001610277565b6102cc7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6105c16105bc36600461416d565b612154565b60408051928352602083019190915201610277565b6102cc6101625481565b6105f36105ee366004614429565b61263e565b60405161027792919061466a565b61026b61060f36600461468f565b6126ad565b6103266106223660046146bb565b61277c565b610555610635366004614429565b612a1f565b6102cc61064836600461416d565b612ac0565b60006001600160e01b03198216638757f10760e01b1480610672575061067282612d09565b92915050565b610680613e58565b604080516020810190915260008152604080518082019091526000808252602082015260006106ae85612d2e565b90506106b981612dac565b6040805160e08101825260038301548152600483015460208083019190915260058401548284015260068401546001600160a01b0390811660608401526007850154166080830152825180820184526008850154815260a0830152825180820184526009850154815260c083015282518082018452600285015481528351808501909452600a8501548452600b9094015490830152969195509350915050565b600033610774600080516020614b4683398151915282611742565b8061078757506107876101635482611742565b6107ac5760405162461bcd60e51b81526004016107a3906147ca565b60405180910390fd5b60006107b786612d2e565b90506107c38186612e11565b83518061081c5760405162461bcd60e51b815260206004820152602160248201527f536f6d61537461727465723a204e4f5f4143434f554e54535f50524f564944456044820152601160fa1b60648201526084016107a3565b60005b818110156108c657600086828151811061083b5761083b614801565b6020908102919091018101516001600160a01b03811660009081526015870190925260409091208054919250908990036108765750506108b4565b88815560405189906001600160a01b038416908c907fd98eb3f94d757b6a35fcfb91cf696b9bc1a78ec87a7378e0b0429bc21386bb3b90600090a450505b806108be8161482d565b91505061081f565b506001979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109589190614846565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161098591815260200190565b602060405180830381865afa1580156109a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190614863565b6000336109e1600080516020614b6683398151915282611742565b806109f457506109f46101625482611742565b610a105760405162461bcd60e51b81526004016107a39061487c565b610a1a8484612e68565b600191505b5092915050565b60008033610a42600080516020614b6683398151915282611742565b80610a555750610a556101625482611742565b610a715760405162461bcd60e51b81526004016107a39061487c565b610a7e8787866000612eb7565b600101549150610a8e8286612e68565b600192505094509492505050565b610aa4613e58565b60408051602081019091526000815260606000610ac085612d2e565b9050610acb816131a2565b6040805160e08101825260038301548152600483015460208083019190915260058401548284015260068401546001600160a01b0390811660608401526007850154166080830152825180820184526008850154815260a0830152825180820184526009850154815260c0830152825180820184526002850154815260148501805485518185028101850190965280865293949193909283919060009084015b82821015610bb6576000848152602090819020604080518082018252600286029092018054835281518085019092526001908101548252828401919091529083529092019101610b6b565b505050509050935093509350509193909250565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5b9190614846565b6001600160a01b03161480610d025750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190614846565b6001600160a01b0316145b610d4e5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016107a3565b610d56613207565b50565b600080610d6583612d2e565b905033610d728282613259565b610d7b826132b8565b600f82015480610dd85760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204e4f5f434f4c4c45435445445f5041594d454e604482015261545360f01b60648201526084016107a3565b6000600f84015560405181815285907fa21048fafbb2c049d83f70c98e05b976cf8f1e5f767ef698a6fdb1e7444c28289060200160405180910390a26006830154610e2d906001600160a01b031683836133af565b506001949350505050565b600080610e4483612d2e565b601081015490915033906001600160a01b03168114610eb75760405162461bcd60e51b815260206004820152602960248201527f536f6d61537461727465723a204e4f545f4e4f4d494e415445445f504f4f4c5f60448201526804f574e4552534849560bc1b60648201526084016107a3565b6011820180546001600160a01b0383166001600160a01b03199182168117909255601084018054909116905560405185907f1db9920ce261cf5299c96ab18ed9969b1b467e3ac5f5e7a33656d6471495cf0790600090a35060019392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906148b3565b80610fac57505060345460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd610fdc8133611742565b6110585760405162461bcd60e51b815260206004820152604160248201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60448201527f6f7420686176652074686520617070726f70726961746520617574686f7269746064820152607960f81b608482015260a4016107a3565b61106461012e85613417565b156110b15760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016107a3565b6110c56001600160a01b03851684846133af565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d5388560405161111491815260200190565b60405180910390a450505050565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081019190915261116b82612d2e565b6040805161010081018252600c830180548252600d840154602080840191909152600e85015483850152600f850154606084015260108501546001600160a01b03908116608085015260118601541660a0840152601290940180548451818702810187019095528085529294919360c0860193909283018282801561120f57602002820191906000526020600020905b8154815260200190600101908083116111fb575b505050505081526020016007820154815250509050919050565b600033428261123785612d2e565b905061124281612dac565b600581015482116112955760405162461bcd60e51b815260206004820152601b60248201527f536f6d61537461727465723a20504f4f4c5f4e4f545f454e444544000000000060448201526064016107a3565b6001600160a01b038316600090815260158201602052604090206002810154600382015481116113075760405162461bcd60e51b815260206004820152601f60248201527f536f6d61537461727465723a20414c4c5f46554e44535f554e4c4f434b45440060448201526064016107a3565b600583015460009061131990866148d5565b9050600061133484600401548461343990919063ffffffff16565b600b8601549091506000906113539061134d8585613445565b90613451565b9050600086600a016000015488101561138457600486015461137f90611379908461345d565b86613469565b611386565b845b6003870154909150611399908290613439565b99508915611405576003860181905560018701546040518b81526001600160a01b038b1691907f238e86f4971c795f36cd7b184dc9e65155fad7d6cf7dc94da2ced659781b653c9060200160405180910390a36007870154611405906001600160a01b03168a8c6133af565b505050505050505050919050565b600154610100900460ff161580801561143057506001805460ff16105b806114495750303b15801561144957506001805460ff16145b6114ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a3565b6001805460ff19168117905580156114ce576001805461ff0019166101001790555b6114d661347f565b6040516bffffffffffffffffffffffff193060601b166020820152600080516020614b66833981519152603482015260540160408051808303601f19018152908290528051602091820120610162556bffffffffffffffffffffffff193060601b1690820152600080516020614b46833981519152603482015260540160408051601f198184030181529190528051602090910120610163558015610d56576001805461ff00191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116479190614846565b6001600160a01b031614806116ee5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e39190614846565b6001600160a01b0316145b61173a5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016107a3565b610d566134c0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c69190614846565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183991906148b3565b9392505050565b600061184a613e58565b600061185584612d2e565b80546040805160e08101825260038401548152600484015460208083019190915260058501548284015260068501546001600160a01b0390811660608401526007860154166080830152825180820184526008860154815260a08301528251908101909252600990930154815260c083015260ff169590945092505050565b6000336118ef600080516020614b4683398151915282611742565b8061190257506119026101635482611742565b61191e5760405162461bcd60e51b81526004016107a3906147ca565b600061192985612d2e565b60128101805460018101825560009182526020918290208101879055604051878152909550919250849187917f123042b7c2ada7097e3ab9d05b9dd5b54bab274a5690d2e16a2316f6e274844a910160405180910390a3505092915050565b600080336119a4600080516020614b6683398151915282611742565b806119b757506119b76101625482611742565b6119d35760405162461bcd60e51b81526004016107a39061487c565b88604001518411611a315760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204c494e4541525f504f4f4c5f4e4f545f454e44604482015261115160f21b60648201526084016107a3565b6000611a408a8a896002612eb7565b9050611a50816001015489612e68565b611a5a81876134fd565b600a810185905560408a0151611a7090866148d5565b600b82015560018101546040518681527f09fff9e1458ed4445723dc13dc4b99f6ae814f666b62ac4d767dd5b9427449439060200160405180910390a2600190810154909a909950975050505050505050565b600080611acf84612d2e565b9050611adb8133613259565b60118101546001600160a01b0390811690841603611b3b5760405162461bcd60e51b815260206004820152601a60248201527f536f6d61537461727465723a20414c52454144595f4f574e455200000000000060448201526064016107a3565b60108101546001600160a01b03808516911603611b5c576001915050610672565b6010810180546001600160a01b0319166001600160a01b03851690811790915560405185907fceff235f9d95a8aba06f4cf159261832d21ce128a9e450e75c5f32faeb2df8e290600090a35060019392505050565b600033611bcc600080516020614b6683398151915282611742565b80611bdf5750611bdf6101625482611742565b611bfb5760405162461bcd60e51b81526004016107a39061487c565b611c0c611c0784612d2e565b6132b8565b50600192915050565b60608167ffffffffffffffff811115611c3057611c30614025565b604051908082528060200260200182016040528015611c6357816020015b6060815260200190600190039081611c4e5790505b50905060005b82811015610a1f57611cd330858584818110611c8757611c87614801565b9050602002810190611c9991906148e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135b292505050565b828281518110611ce557611ce5614801565b60200260200101819052508080611cfb9061482d565b915050611c69565b600080611d0f83612d2e565b905033611d1c8282613259565b6005820154421015611d695760405162461bcd60e51b815260206004820152601660248201527514dbdb5854dd185c9d195c8e881393d517d15391115160521b60448201526064016107a3565b600c82015480611db45760405162461bcd60e51b815260206004820152601660248201527514dbdb5854dd185c9d195c8e881393d7d55394d3d31160521b60448201526064016107a3565b6000600c84015560405181815285907f4caa9523353802828989b84b2bb248c625aeb6d44999cd9ba0fe7e15711f3db79060200160405180910390a26007830154610e2d906001600160a01b031683836133af565b6000808211611e5a5760405162461bcd60e51b815260206004820152601860248201527f536f6d61537461727465723a205a45524f5f414d4f554e54000000000000000060448201526064016107a3565b6000611e6584612d2e565b60058101549091504210611eb55760405162461bcd60e51b815260206004820152601760248201527614dbdb5854dd185c9d195c8e881413d3d317d153911151604a1b60448201526064016107a3565b33611ec08282613259565b600d820154611ecf908561345d565b600d830181905560038301541015611f355760405162461bcd60e51b8152602060048201526024808201527f536f6d61537461727465723a2049535355414e43455f4c494d49545f455843456044820152631151115160e21b60648201526084016107a3565b600c820154611f44908561345d565b600c83015560405184815285907f4ef8678904704bdf752e12cfb17a926ce33dcaf9077e565fb660cfe644ed22649060200160405180910390a26007820154610e2d906001600160a01b03168230876136a6565b600033611fb3600080516020614b6683398151915282611742565b80611fc65750611fc66101625482611742565b611fe25760405162461bcd60e51b81526004016107a39061487c565b6001600160a01b03841660009081526101656020526040902054806120495760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a204e4f5f434f4c4c45435445445f46454553000060448201526064016107a3565b6001600160a01b0385166000818152610165602052604080822091909155517f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f906120979084815260200190565b60405180910390a2610e2d6001600160a01b03861685836133af565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000806120e786612d2e565b90506120f281612dac565b6001600160a01b0385166000908152601590910160209081526040918290206004810154835180850185528254815260018301548185015284518086019095526002830154855260039092015492840192909252945090925090509250925092565b6000806002600054036121a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107a3565b60026000558261220e5760405162461bcd60e51b815260206004820152602a60248201527f536f6d61537461727465723a205245515545535445445f5041594d454e545f416044820152694d4f554e545f5a45524f60b01b60648201526084016107a3565b600033905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190614846565b905060006122a487612d2e565b600481015490915042908110156122fd5760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537461727465723a20504f4f4c5f4e4f545f5354415254454400000060448201526064016107a3565b6005820154811061234a5760405162461bcd60e51b815260206004820152601760248201527614dbdb5854dd185c9d195c8e881413d3d317d153911151604a1b60448201526064016107a3565b600c8201546123a65760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204e4f5f415641494c41424c455f49535355414e604482015261434560f01b60648201526084016107a3565b601382015460405163253bd7b760e01b81526001600160a01b03868116600483015260248201929092529084169063253bd7b790604401602060405180830381865afa1580156123fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241e91906148b3565b61246a5760405162461bcd60e51b815260206004820152601a60248201527f536f6d61537461727465723a204e4f5f50524956494c4547455300000000000060448201526064016107a3565b6124758288866136e4565b6001600160a01b03861660009081526015850160205260409020919750955086156124dc57600e8301546124a9908861345d565b600e84015560018101546124bd908861345d565b600182015560068301546124dc906001600160a01b031686308a6136a6565b85156125dc576000835460ff1660028111156124fa576124fa614459565b0361251d576007830154612518906001600160a01b031686886133af565b6125c7565b600281015460009061252f908861345d565b600280840182905560408051602081019091529086015481529091506000906125619061255c9084613821565b613854565b600384015490915060009061257690836148d5565b6003850183905590506002865460ff16600281111561259757612597614459565b036125a457600484018290555b80156125c35760078601546125c3906001600160a01b031689836133af565b5050505b600c8301546125d69087613439565b600c8401555b60408051898152602081018990529081018790526001600160a01b038616908a907f7d421bbd3ba855339632fdd240923952de83fd611d837a284506157b596f49329060600160405180910390a3505050505060016000819055509250929050565b600061265d604051806040016040528060008152602001600081525090565b600061266885612d2e565b80546001600160a01b038616600090815260159092016020908152604092839020835180850190945280548452600101549083015260ff1693509150505b9250929050565b6000336126c8600080516020614b4683398151915282611742565b806126db57506126db6101635482611742565b6126f75760405162461bcd60e51b81526004016107a3906147ca565b600061270286612d2e565b905061270e8186612e11565b8381600c01600601868154811061272757612727614801565b906000526020600020018190555084867fc128898667140122862a239400b6468386a01fb68fe432ebe587a84166d241ad8660405161276891815260200190565b60405180910390a350600195945050505050565b60008033612798600080516020614b6683398151915282611742565b806127ab57506127ab6101625482611742565b6127c75760405162461bcd60e51b81526004016107a39061487c565b60006127d68a8a896001612eb7565b90506127e6816001015489612e68565b6127f081876134fd565b845160408b01518790600090612808906001906148d5565b905060005b8381101561299c57600089828151811061282957612829614801565b6020026020010151905061284a84826020015161386e90919063ffffffff16565b6128ab5760405162461bcd60e51b815260206004820152602c60248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f554e60448201526b1313d0d2d25391d7d410549560a21b60648201526084016107a3565b6020810151815190945083811161291d5760405162461bcd60e51b815260206004820152603060248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f535460448201526f0415254494e475f54494d455354414d560841b60648201526084016107a3565b601487018054600180820183556000928352602092839020855160029093020182815585840151519101819055604080519283529282015291945084918a917f9ad21f79ce9c3c640f4c7e4d5cccb24f33967153042855c93f33f9cb457b7095910160405180910390a2505080806129949061482d565b91505061280d565b506129a8826001613875565b612a065760405162461bcd60e51b815260206004820152602960248201527f536f6d61537461727465723a20554e4c4f434b494e475f504152545f4e4f545f604482015268455155414c5f4f4e4560b81b60648201526084016107a3565b505050600190810154909a909950975050505050505050565b60408051808201909152600080825260208201526040805180820190915260008082526020820152600080612a5386612d2e565b9050612a5e816131a2565b6001600160a01b0385166000908152601590910160209081526040918290206005810154835180850185528254815260018301548185015284518086019095526002830154855260039092015492840192909252945090925090509250925092565b60003381612acd85612d2e565b9050612ad8816131a2565b60148101548410612b375760405162461bcd60e51b815260206004820152602360248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f494e6044820152620888ab60eb1b60648201526084016107a3565b6000816014018581548110612b4e57612b4e614801565b90600052602060002090600202019050612b654290565b81541115612bbf5760405162461bcd60e51b815260206004820152602160248201527f536f6d61537461727465723a20494e54455256414c5f4e4f545f5354415254456044820152601160fa1b60648201526084016107a3565b6001600160a01b038316600090815260158301602052604090206005810154861015612c3c5760405162461bcd60e51b815260206004820152602660248201527f536f6d61537461727465723a20494e54455256414c5f414c52454144595f554e6044820152651313d0d2d15160d21b60648201526084016107a3565b6002810154604080516020810190915260018401548152600091612c639161255c91613821565b6003830154909150600090612c7890836148d5565b6003840183905590508015612ce9576007850154612ca0906001600160a01b031687836133af565b856001600160a01b031685600101547fbc32d6ae85e398c3597f134c5c6c033c48e3e00da9908577c909df0cf607470183604051612ce091815260200190565b60405180910390a35b612cf488600161345d565b60059093019290925550935050505092915050565b60006001600160e01b0319821663b55bd4f760e01b14806106725750610672826138bf565b610164546000908210612d835760405162461bcd60e51b815260206004820152601f60248201527f536f6d61537461727465723a20494e56414c49445f504f4f4c5f494e4445580060448201526064016107a3565b6101648281548110612d9757612d97614801565b90600052602060002090601602019050919050565b6002815460ff166002811115612dc457612dc4614459565b14610d565760405162461bcd60e51b815260206004820152601c60248201527f536f6d61537461727465723a204e4f545f4c494e4541525f504f4f4c0000000060448201526064016107a3565b60128201548110612e645760405162461bcd60e51b815260206004820181905260248201527f536f6d61537461727465723a20494e56414c49445f4c494d49545f494e44455860448201526064016107a3565b5050565b60408051838152602081018390527f57f1ae35d0f26aa32535cf261cd0e6a226bb599a160b37666998e6aeb0f52270910160405180910390a16000612eac83612d2e565b601301919091555050565b6000804290508086602001511015612ed157602086018190525b60a0860151612ee19060016138f4565b612f2d5760405162461bcd60e51b815260206004820152601c60248201527f536f6d61537461727465723a20494e56414c49445f50455243454e540000000060448201526064016107a3565b8560400151866020015110612f925760405162461bcd60e51b815260206004820152602560248201527f536f6d61537461727465723a20494e56414c49445f454e44494e475f54494d4560448201526405354414d560dc1b60648201526084016107a3565b50610164805460018101808355600083815291929083908110612fb757612fb7614801565b60009182526020909120600160169092020181810184905580549092508591839160ff191690836002811115612fef57612fef614459565b0217905550865160038201556020808801516004830155604080890151600584015560608901516006840180546001600160a01b039283166001600160a01b03199182161790915560808b015160078601805491909316911617905560a089015151600884015560c0890151516009840155805160018082528183019092529182810190803683375050815161308e9260128501925060200190613ece565b508581600c016006016000815481106130a9576130a9614801565b90600052602060002001819055508481600c0160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086608001516001600160a01b031687606001516001600160a01b03167f6d0a80f2ee73de8861b1887eb263d606bb9e1b85beff2d71b45b913b0f9aed3186858b600001518c602001518d604001518e60a00151600001518f60c00151600001518f60405161315898979695949392919061492f565b60405180910390a36040516001600160a01b0386169083907f1db9920ce261cf5299c96ab18ed9969b1b467e3ac5f5e7a33656d6471495cf0790600090a39150505b949350505050565b6001815460ff1660028111156131ba576131ba614459565b14610d565760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a204e4f545f494e54455256414c5f504f4f4c000060448201526064016107a3565b61320f61393e565b6034805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60118201546001600160a01b03828116911614612e645760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a205045524d495353494f4e5f44454e494544000060448201526064016107a3565b600e8101546000036132c75750565b600e8101546040805160208101909152600883015481526000916132f3916132ee91613821565b613989565b60068301546001600160a01b03166000908152610165602052604090205490915061331e908261345d565b60068301546001600160a01b031660009081526101656020526040812091909155600e83015461334e9083613439565b600f840154909150613360908261345d565b600f8401556000600e840155600183015460408051838152602081018590527f969043bab89ac5dd319ed2e1356119888d1624898734ac8516a120bea7fb4260910160405180910390a2505050565b6040516001600160a01b03831660248201526044810182905261341290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139d8565b505050565b6001600160a01b03811660009081526001830160205260408120541515611839565b600061183982846148d5565b60006118398284614973565b600061183982846149a0565b600061183982846149b4565b60008183106134785781611839565b5090919050565b600154610100900460ff166134a65760405162461bcd60e51b81526004016107a3906149c7565b6040805160008152602081019091526134be90613aaa565b565b6134c8613b0a565b6034805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861323c3390565b6135088160016138f4565b61356c5760405162461bcd60e51b815260206004820152602f60248201527f536f6d61537461727465723a20494e56414c49445f494d4d4544494154454c5960448201526e17d5539313d0d2d25391d7d4105495608a1b60648201526084016107a3565b8051600283018190556001830154604051918252907f4b934b79ea913cbf45273ed2d6516ef75fd53b22d460b29bfc3627bdda76103f9060200160405180910390a25050565b60606001600160a01b0383163b61361a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107a3565b600080846001600160a01b0316846040516136359190614a12565b600060405180830381855af49150503d8060008114613670576040519150601f19603f3d011682016040523d82523d6000602084013e613675565b606091505b509150915061369d8282604051806060016040528060278152602001614b8660279139613b52565b95945050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526136de9085906323b872dd60e01b906084016133db565b50505050565b6001600160a01b03811660009081526015840160205260408120805460128601805486949392849291811061371b5761371b614801565b90600052602060002001549050808260000160010154106137925760405162461bcd60e51b815260206004820152602b60248201527f536f6d61537461727465723a204143434f554e545f5041594d454e545f4c494d60448201526a125517d15610d15151115160aa1b60648201526084016107a3565b600182015481906137a3908661345d565b11156137bc5760018201546137b9908290613439565b93505b6040805160208101909152600988015481526137dc9061255c9086613821565b600c88015490935083111561381757600c870154604080516020810190915260098901548152909350613814906132ee908590613b8b565b93505b5050935093915050565b604080516020810190915260008152604051806020016040528083856000015161384b9190614973565b90529392505050565b60006138626012600a614b12565b825161067291906149a0565b5190511190565b60006138836012600a614b12565b61388f906000196149a0565b82111561389e57506000610672565b6138aa6012600a614b12565b6138b49083614973565b835114905092915050565b60006001600160e01b0319821663d86f1ca160e01b148061067257506301ffc9a760e01b6001600160e01b0319831614610672565b60006139026012600a614b12565b61390e906000196149a0565b82111561391d57506001610672565b6139296012600a614b12565b6139339083614973565b835110905092915050565b613946610f18565b6134be5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107a3565b6000806139986012600a614b12565b83516139a49190614b1e565b116139b05760006139b3565b60015b60ff166139c26012600a614b12565b83516139ce91906149a0565b61067291906149b4565b6000613a2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bdf9092919063ffffffff16565b8051909150156134125780806020019051810190613a4b91906148b3565b6134125760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107a3565b600154610100900460ff16613ad15760405162461bcd60e51b81526004016107a3906149c7565b613ad9613bee565b613ae1613bee565b613ae9613bee565b613af1613bee565b613af9613c15565b613b01613bee565b610d5681613c48565b613b12610f18565b156134be5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107a3565b60608315613b61575081611839565b825115613b715782518084602001fd5b8160405162461bcd60e51b81526004016107a39190614b32565b604080516020810190915260008152604080516020810190915282518190613bb56012600a614b12565b613bc16012600a614b12565b613bcb9190614973565b613bd59087614973565b61384b91906149a0565b606061319a8484600085613cba565b600154610100900460ff166134be5760405162461bcd60e51b81526004016107a3906149c7565b600154610100900460ff16613c3c5760405162461bcd60e51b81526004016107a3906149c7565b6034805460ff19169055565b600154610100900460ff16613c6f5760405162461bcd60e51b81526004016107a3906149c7565b60005b8151811015612e6457613ca9828281518110613c9057613c90614801565b602002602001015161012e613deb90919063ffffffff16565b50613cb38161482d565b9050613c72565b606082471015613d1b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107a3565b6001600160a01b0385163b613d725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107a3565b600080866001600160a01b03168587604051613d8e9190614a12565b60006040518083038185875af1925050503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b5091509150613de0828286613b52565b979650505050505050565b6000611839836001600160a01b0384166000613e1a838360009081526001919091016020526040902054151590565b613e5057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610672565b506000610672565b6040518060e0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001613eae6040518060200160405280600081525090565b8152602001613ec96040518060200160405280600081525090565b905290565b828054828255906000526020600020908101928215613f09579160200282015b82811115613f09578251825591602001919060010190613eee565b50613f15929150613f19565b5090565b5b80821115613f155760008155600101613f1a565b600060208284031215613f4057600080fd5b81356001600160e01b03198116811461183957600080fd5b600060208284031215613f6a57600080fd5b5035919050565b805182526020810151602083015260408101516040830152606081015160018060a01b038082166060850152806080840151166080850152505060a08101515160a083015260c08101515160c08301525050565b6101408101613fd48286613f71565b835160e08301528251610100830152602083015161012083015261319a565b6001600160a01b0381168114610d5657600080fd5b60006020828403121561401a57600080fd5b813561183981613ff3565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561405e5761405e614025565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561408d5761408d614025565b604052919050565b600067ffffffffffffffff8211156140af576140af614025565b5060051b60200190565b6000806000606084860312156140ce57600080fd5b833592506020808501359250604085013567ffffffffffffffff8111156140f457600080fd5b8501601f8101871361410557600080fd5b803561411861411382614095565b614064565b81815260059190911b8201830190838101908983111561413757600080fd5b928401925b8284101561415e57833561414f81613ff3565b8252928401929084019061413c565b80955050505050509250925092565b6000806040838503121561418057600080fd5b50508035926020909101359150565b6000602082840312156141a157600080fd5b6040516020810181811067ffffffffffffffff821117156141c4576141c4614025565b6040529135825250919050565b600060e082840312156141e357600080fd5b60405160e0810181811067ffffffffffffffff8211171561420657614206614025565b8060405250809150823581526020830135602082015260408301356040820152606083013561423481613ff3565b6060820152608083013561424781613ff3565b60808201526142598460a0850161418f565b60a082015261426b8460c0850161418f565b60c08201525092915050565b600080600080610140858703121561428e57600080fd5b61429886866141d1565b935060e0850135925061010085013591506101208501356142b881613ff3565b939692955090935050565b60006101208083016142d58488613f71565b855160e085015261010084019190915283519081905261014083019060209081860160005b82811015614322578151805186528401515184860152604090940193908301906001016142fa565b509298975050505050505050565b60008060006060848603121561434557600080fd5b833561435081613ff3565b9250602084013561436081613ff3565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156143a157815187529582019590820190600101614385565b509495945050505050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160018060a01b0380821660a08501528060a08601511660c0850152505060c08301516101008060e0850152614415610120850183614371565b60e095909501519301929092525090919050565b6000806040838503121561443c57600080fd5b82359150602083013561444e81613ff3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061448d57634e487b7160e01b600052602160045260246000fd5b9052565b61010081016144a0828561446f565b6118396020830184613f71565b60008060008060008061018087890312156144c757600080fd5b6144d188886141d1565b955060e0870135945061010087013593506101208701356144f181613ff3565b925061450188610140890161418f565b915061016087013590509295509295509295565b6000806020838503121561452857600080fd5b823567ffffffffffffffff8082111561454057600080fd5b818501915085601f83011261455457600080fd5b81358181111561456357600080fd5b8660208260051b850101111561457857600080fd5b60209290920196919550909350505050565b60005b838110156145a557818101518382015260200161458d565b50506000910152565b600081518084526145c681602086016020860161458a565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561462f57603f1988860301845261461d8583516145ae565b94509285019290850190600101614601565b5092979650505050505050565b6000806040838503121561464f57600080fd5b823561465a81613ff3565b9150602083013561444e81613ff3565b60608101614678828561446f565b611839602083018480518252602090810151910152565b6000806000606084860312156146a457600080fd5b505081359360208301359350604090920135919050565b60008060008060008061018087890312156146d557600080fd5b6146df88886141d1565b955060e0870135945061010087013593506101208701356146ff81613ff3565b925061470f88610140890161418f565b915061016087013567ffffffffffffffff81111561472c57600080fd5b8701601f8101891361473d57600080fd5b8035602061474d61411383614095565b82815260069290921b8301810191818101908c84111561476c57600080fd5b938201935b838510156147b8576040858e03121561478a5760008081fd5b61479261403b565b853581526147a28e85880161418f565b8185015282526040949094019390820190614771565b80955050505050509295509295509295565b6020808252601b908201527f536f6d61537461727465723a204f4e4c595f57484954454c4953540000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161483f5761483f614817565b5060010190565b60006020828403121561485857600080fd5b815161183981613ff3565b60006020828403121561487557600080fd5b5051919050565b60208082526017908201527f536f6d61537461727465723a204f4e4c595f41444d494e000000000000000000604082015260600190565b6000602082840312156148c557600080fd5b8151801515811461183957600080fd5b8181038181111561067257610672614817565b6000808335601e198436030181126148ff57600080fd5b83018035915067ffffffffffffffff82111561491a57600080fd5b6020019150368190038213156126a657600080fd5b610100810161493e828b61446f565b602082019890985260408101969096526060860194909452608085019290925260a084015260c083015260e090910152919050565b808202811582820484141761067257610672614817565b634e487b7160e01b600052601260045260246000fd5b6000826149af576149af61498a565b500490565b8082018082111561067257610672614817565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251614a2481846020870161458a565b9190910192915050565b600181815b80851115614a69578160001904821115614a4f57614a4f614817565b80851615614a5c57918102915b93841c9390800290614a33565b509250929050565b600082614a8057506001610672565b81614a8d57506000610672565b8160018114614aa35760028114614aad57614ac9565b6001915050610672565b60ff841115614abe57614abe614817565b50506001821b610672565b5060208310610133831016604e8410600b8410161715614aec575081810a610672565b614af68383614a2e565b8060001904821115614b0a57614b0a614817565b029392505050565b60006118398383614a71565b600082614b2d57614b2d61498a565b500690565b60208152600061183960208301846145ae56fecb2590299b882c6299c8ef896a52287c54a181c6babb62570e406d882308f8d07be88a9a9026c272688107a93f41943f9afa8e325f874917736dd2606a525fcd416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c80638456cb5911610146578063b333ad87116100c3578063e2481dbd11610087578063e2481dbd146105d6578063e43b1560146105e0578063ee90ac8214610601578063f0f2192014610614578063f63d8d3214610627578063f6f94e2c1461063a57600080fd5b8063b333ad871461051c578063c879c6d81461052f578063ceec13ff14610542578063d869759814610587578063d96073cf146105ae57600080fd5b8063a123ada71161010a578063a123ada7146104b0578063a90101fb146104c3578063a969ff0a146104d6578063ac9650d8146104e9578063ae4ff9dc1461050957600080fd5b80638456cb59146104585780638c788de01461046057806391d148541461046957806398ecde321461047c5780639a419e2e1461049d57600080fd5b806346f75858116101d457806363727fc21161019857806363727fc2146103c957806366258068146104085780636ccc56cd1461041d57806376d6ffa11461043d5780638129fc1c1461045057600080fd5b806346f758581461037c57806348796f3a1461038f5780634fdf5539146103995780635c975abb146103ae5780635f3e849f146103b657600080fd5b806326338c611161021b57806326338c61146103005780632e2ec9e6146103135780632f9afafc1461033d5780633f4ba83a1461035f57806341975af81461036957600080fd5b806301ffc9a714610258578063059332ec146102805780631cead9a7146102a257806323fc3136146102da578063248a9ca3146102ed575b600080fd5b61026b610266366004613f2e565b61064d565b60405190151581526020015b60405180910390f35b61029361028e366004613f58565b610678565b60405161027793929190613fc5565b6102cc6102b0366004614008565b6001600160a01b03166000908152610165602052604090205490565b604051908152602001610277565b61026b6102e83660046140b9565b610759565b6102cc6102fb366004613f58565b6108d4565b61026b61030e36600461416d565b6109c6565b610326610321366004614277565b610a26565b604080519215158352602083019190915201610277565b61035061034b366004613f58565b610a9c565b604051610277939291906142c3565b610367610bca565b005b61026b610377366004613f58565b610d59565b61026b61038a366004613f58565b610e38565b6102cc6101635481565b6102cc600080516020614b4683398151915281565b61026b610f18565b6103676103c4366004614330565b610fb1565b6103f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610277565b6102cc600080516020614b6683398151915281565b61043061042b366004613f58565b611122565b60405161027791906143ac565b6102cc61044b366004613f58565b611229565b610367611413565b6103676115b6565b610164546102cc565b61026b610477366004614429565b611742565b61048f61048a366004613f58565b611840565b604051610277929190614491565b6102cc6104ab36600461416d565b6118d4565b6103266104be3660046144ad565b611988565b61026b6104d1366004614429565b611ac3565b61026b6104e4366004613f58565b611bb1565b6104fc6104f7366004614515565b611c15565b60405161027791906145da565b61026b610517366004613f58565b611d03565b61026b61052a36600461416d565b611e09565b61026b61053d36600461463c565b611f98565b610555610550366004614429565b6120b3565b60408051845181526020948501518582015283519181019190915292909101516060830152608082015260a001610277565b6102cc7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6105c16105bc36600461416d565b612154565b60408051928352602083019190915201610277565b6102cc6101625481565b6105f36105ee366004614429565b61263e565b60405161027792919061466a565b61026b61060f36600461468f565b6126ad565b6103266106223660046146bb565b61277c565b610555610635366004614429565b612a1f565b6102cc61064836600461416d565b612ac0565b60006001600160e01b03198216638757f10760e01b1480610672575061067282612d09565b92915050565b610680613e58565b604080516020810190915260008152604080518082019091526000808252602082015260006106ae85612d2e565b90506106b981612dac565b6040805160e08101825260038301548152600483015460208083019190915260058401548284015260068401546001600160a01b0390811660608401526007850154166080830152825180820184526008850154815260a0830152825180820184526009850154815260c083015282518082018452600285015481528351808501909452600a8501548452600b9094015490830152969195509350915050565b600033610774600080516020614b4683398151915282611742565b8061078757506107876101635482611742565b6107ac5760405162461bcd60e51b81526004016107a3906147ca565b60405180910390fd5b60006107b786612d2e565b90506107c38186612e11565b83518061081c5760405162461bcd60e51b815260206004820152602160248201527f536f6d61537461727465723a204e4f5f4143434f554e54535f50524f564944456044820152601160fa1b60648201526084016107a3565b60005b818110156108c657600086828151811061083b5761083b614801565b6020908102919091018101516001600160a01b03811660009081526015870190925260409091208054919250908990036108765750506108b4565b88815560405189906001600160a01b038416908c907fd98eb3f94d757b6a35fcfb91cf696b9bc1a78ec87a7378e0b0429bc21386bb3b90600090a450505b806108be8161482d565b91505061081f565b506001979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109589190614846565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161098591815260200190565b602060405180830381865afa1580156109a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190614863565b6000336109e1600080516020614b6683398151915282611742565b806109f457506109f46101625482611742565b610a105760405162461bcd60e51b81526004016107a39061487c565b610a1a8484612e68565b600191505b5092915050565b60008033610a42600080516020614b6683398151915282611742565b80610a555750610a556101625482611742565b610a715760405162461bcd60e51b81526004016107a39061487c565b610a7e8787866000612eb7565b600101549150610a8e8286612e68565b600192505094509492505050565b610aa4613e58565b60408051602081019091526000815260606000610ac085612d2e565b9050610acb816131a2565b6040805160e08101825260038301548152600483015460208083019190915260058401548284015260068401546001600160a01b0390811660608401526007850154166080830152825180820184526008850154815260a0830152825180820184526009850154815260c0830152825180820184526002850154815260148501805485518185028101850190965280865293949193909283919060009084015b82821015610bb6576000848152602090819020604080518082018252600286029092018054835281518085019092526001908101548252828401919091529083529092019101610b6b565b505050509050935093509350509193909250565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5b9190614846565b6001600160a01b03161480610d025750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190614846565b6001600160a01b0316145b610d4e5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016107a3565b610d56613207565b50565b600080610d6583612d2e565b905033610d728282613259565b610d7b826132b8565b600f82015480610dd85760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204e4f5f434f4c4c45435445445f5041594d454e604482015261545360f01b60648201526084016107a3565b6000600f84015560405181815285907fa21048fafbb2c049d83f70c98e05b976cf8f1e5f767ef698a6fdb1e7444c28289060200160405180910390a26006830154610e2d906001600160a01b031683836133af565b506001949350505050565b600080610e4483612d2e565b601081015490915033906001600160a01b03168114610eb75760405162461bcd60e51b815260206004820152602960248201527f536f6d61537461727465723a204e4f545f4e4f4d494e415445445f504f4f4c5f60448201526804f574e4552534849560bc1b60648201526084016107a3565b6011820180546001600160a01b0383166001600160a01b03199182168117909255601084018054909116905560405185907f1db9920ce261cf5299c96ab18ed9969b1b467e3ac5f5e7a33656d6471495cf0790600090a35060019392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906148b3565b80610fac57505060345460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd610fdc8133611742565b6110585760405162461bcd60e51b815260206004820152604160248201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60448201527f6f7420686176652074686520617070726f70726961746520617574686f7269746064820152607960f81b608482015260a4016107a3565b61106461012e85613417565b156110b15760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016107a3565b6110c56001600160a01b03851684846133af565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d5388560405161111491815260200190565b60405180910390a450505050565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081019190915261116b82612d2e565b6040805161010081018252600c830180548252600d840154602080840191909152600e85015483850152600f850154606084015260108501546001600160a01b03908116608085015260118601541660a0840152601290940180548451818702810187019095528085529294919360c0860193909283018282801561120f57602002820191906000526020600020905b8154815260200190600101908083116111fb575b505050505081526020016007820154815250509050919050565b600033428261123785612d2e565b905061124281612dac565b600581015482116112955760405162461bcd60e51b815260206004820152601b60248201527f536f6d61537461727465723a20504f4f4c5f4e4f545f454e444544000000000060448201526064016107a3565b6001600160a01b038316600090815260158201602052604090206002810154600382015481116113075760405162461bcd60e51b815260206004820152601f60248201527f536f6d61537461727465723a20414c4c5f46554e44535f554e4c4f434b45440060448201526064016107a3565b600583015460009061131990866148d5565b9050600061133484600401548461343990919063ffffffff16565b600b8601549091506000906113539061134d8585613445565b90613451565b9050600086600a016000015488101561138457600486015461137f90611379908461345d565b86613469565b611386565b845b6003870154909150611399908290613439565b99508915611405576003860181905560018701546040518b81526001600160a01b038b1691907f238e86f4971c795f36cd7b184dc9e65155fad7d6cf7dc94da2ced659781b653c9060200160405180910390a36007870154611405906001600160a01b03168a8c6133af565b505050505050505050919050565b600154610100900460ff161580801561143057506001805460ff16105b806114495750303b15801561144957506001805460ff16145b6114ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a3565b6001805460ff19168117905580156114ce576001805461ff0019166101001790555b6114d661347f565b6040516bffffffffffffffffffffffff193060601b166020820152600080516020614b66833981519152603482015260540160408051808303601f19018152908290528051602091820120610162556bffffffffffffffffffffffff193060601b1690820152600080516020614b46833981519152603482015260540160408051601f198184030181529190528051602090910120610163558015610d56576001805461ff00191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116479190614846565b6001600160a01b031614806116ee5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e39190614846565b6001600160a01b0316145b61173a5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016107a3565b610d566134c0565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c69190614846565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183991906148b3565b9392505050565b600061184a613e58565b600061185584612d2e565b80546040805160e08101825260038401548152600484015460208083019190915260058501548284015260068501546001600160a01b0390811660608401526007860154166080830152825180820184526008860154815260a08301528251908101909252600990930154815260c083015260ff169590945092505050565b6000336118ef600080516020614b4683398151915282611742565b8061190257506119026101635482611742565b61191e5760405162461bcd60e51b81526004016107a3906147ca565b600061192985612d2e565b60128101805460018101825560009182526020918290208101879055604051878152909550919250849187917f123042b7c2ada7097e3ab9d05b9dd5b54bab274a5690d2e16a2316f6e274844a910160405180910390a3505092915050565b600080336119a4600080516020614b6683398151915282611742565b806119b757506119b76101625482611742565b6119d35760405162461bcd60e51b81526004016107a39061487c565b88604001518411611a315760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204c494e4541525f504f4f4c5f4e4f545f454e44604482015261115160f21b60648201526084016107a3565b6000611a408a8a896002612eb7565b9050611a50816001015489612e68565b611a5a81876134fd565b600a810185905560408a0151611a7090866148d5565b600b82015560018101546040518681527f09fff9e1458ed4445723dc13dc4b99f6ae814f666b62ac4d767dd5b9427449439060200160405180910390a2600190810154909a909950975050505050505050565b600080611acf84612d2e565b9050611adb8133613259565b60118101546001600160a01b0390811690841603611b3b5760405162461bcd60e51b815260206004820152601a60248201527f536f6d61537461727465723a20414c52454144595f4f574e455200000000000060448201526064016107a3565b60108101546001600160a01b03808516911603611b5c576001915050610672565b6010810180546001600160a01b0319166001600160a01b03851690811790915560405185907fceff235f9d95a8aba06f4cf159261832d21ce128a9e450e75c5f32faeb2df8e290600090a35060019392505050565b600033611bcc600080516020614b6683398151915282611742565b80611bdf5750611bdf6101625482611742565b611bfb5760405162461bcd60e51b81526004016107a39061487c565b611c0c611c0784612d2e565b6132b8565b50600192915050565b60608167ffffffffffffffff811115611c3057611c30614025565b604051908082528060200260200182016040528015611c6357816020015b6060815260200190600190039081611c4e5790505b50905060005b82811015610a1f57611cd330858584818110611c8757611c87614801565b9050602002810190611c9991906148e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135b292505050565b828281518110611ce557611ce5614801565b60200260200101819052508080611cfb9061482d565b915050611c69565b600080611d0f83612d2e565b905033611d1c8282613259565b6005820154421015611d695760405162461bcd60e51b815260206004820152601660248201527514dbdb5854dd185c9d195c8e881393d517d15391115160521b60448201526064016107a3565b600c82015480611db45760405162461bcd60e51b815260206004820152601660248201527514dbdb5854dd185c9d195c8e881393d7d55394d3d31160521b60448201526064016107a3565b6000600c84015560405181815285907f4caa9523353802828989b84b2bb248c625aeb6d44999cd9ba0fe7e15711f3db79060200160405180910390a26007830154610e2d906001600160a01b031683836133af565b6000808211611e5a5760405162461bcd60e51b815260206004820152601860248201527f536f6d61537461727465723a205a45524f5f414d4f554e54000000000000000060448201526064016107a3565b6000611e6584612d2e565b60058101549091504210611eb55760405162461bcd60e51b815260206004820152601760248201527614dbdb5854dd185c9d195c8e881413d3d317d153911151604a1b60448201526064016107a3565b33611ec08282613259565b600d820154611ecf908561345d565b600d830181905560038301541015611f355760405162461bcd60e51b8152602060048201526024808201527f536f6d61537461727465723a2049535355414e43455f4c494d49545f455843456044820152631151115160e21b60648201526084016107a3565b600c820154611f44908561345d565b600c83015560405184815285907f4ef8678904704bdf752e12cfb17a926ce33dcaf9077e565fb660cfe644ed22649060200160405180910390a26007820154610e2d906001600160a01b03168230876136a6565b600033611fb3600080516020614b6683398151915282611742565b80611fc65750611fc66101625482611742565b611fe25760405162461bcd60e51b81526004016107a39061487c565b6001600160a01b03841660009081526101656020526040902054806120495760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a204e4f5f434f4c4c45435445445f46454553000060448201526064016107a3565b6001600160a01b0385166000818152610165602052604080822091909155517f78473f3f373f7673597f4f0fa5873cb4d375fea6d4339ad6b56dbd411513cb3f906120979084815260200190565b60405180910390a2610e2d6001600160a01b03861685836133af565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000806120e786612d2e565b90506120f281612dac565b6001600160a01b0385166000908152601590910160209081526040918290206004810154835180850185528254815260018301548185015284518086019095526002830154855260039092015492840192909252945090925090509250925092565b6000806002600054036121a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107a3565b60026000558261220e5760405162461bcd60e51b815260206004820152602a60248201527f536f6d61537461727465723a205245515545535445445f5041594d454e545f416044820152694d4f554e545f5a45524f60b01b60648201526084016107a3565b600033905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190614846565b905060006122a487612d2e565b600481015490915042908110156122fd5760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537461727465723a20504f4f4c5f4e4f545f5354415254454400000060448201526064016107a3565b6005820154811061234a5760405162461bcd60e51b815260206004820152601760248201527614dbdb5854dd185c9d195c8e881413d3d317d153911151604a1b60448201526064016107a3565b600c8201546123a65760405162461bcd60e51b815260206004820152602260248201527f536f6d61537461727465723a204e4f5f415641494c41424c455f49535355414e604482015261434560f01b60648201526084016107a3565b601382015460405163253bd7b760e01b81526001600160a01b03868116600483015260248201929092529084169063253bd7b790604401602060405180830381865afa1580156123fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241e91906148b3565b61246a5760405162461bcd60e51b815260206004820152601a60248201527f536f6d61537461727465723a204e4f5f50524956494c4547455300000000000060448201526064016107a3565b6124758288866136e4565b6001600160a01b03861660009081526015850160205260409020919750955086156124dc57600e8301546124a9908861345d565b600e84015560018101546124bd908861345d565b600182015560068301546124dc906001600160a01b031686308a6136a6565b85156125dc576000835460ff1660028111156124fa576124fa614459565b0361251d576007830154612518906001600160a01b031686886133af565b6125c7565b600281015460009061252f908861345d565b600280840182905560408051602081019091529086015481529091506000906125619061255c9084613821565b613854565b600384015490915060009061257690836148d5565b6003850183905590506002865460ff16600281111561259757612597614459565b036125a457600484018290555b80156125c35760078601546125c3906001600160a01b031689836133af565b5050505b600c8301546125d69087613439565b600c8401555b60408051898152602081018990529081018790526001600160a01b038616908a907f7d421bbd3ba855339632fdd240923952de83fd611d837a284506157b596f49329060600160405180910390a3505050505060016000819055509250929050565b600061265d604051806040016040528060008152602001600081525090565b600061266885612d2e565b80546001600160a01b038616600090815260159092016020908152604092839020835180850190945280548452600101549083015260ff1693509150505b9250929050565b6000336126c8600080516020614b4683398151915282611742565b806126db57506126db6101635482611742565b6126f75760405162461bcd60e51b81526004016107a3906147ca565b600061270286612d2e565b905061270e8186612e11565b8381600c01600601868154811061272757612727614801565b906000526020600020018190555084867fc128898667140122862a239400b6468386a01fb68fe432ebe587a84166d241ad8660405161276891815260200190565b60405180910390a350600195945050505050565b60008033612798600080516020614b6683398151915282611742565b806127ab57506127ab6101625482611742565b6127c75760405162461bcd60e51b81526004016107a39061487c565b60006127d68a8a896001612eb7565b90506127e6816001015489612e68565b6127f081876134fd565b845160408b01518790600090612808906001906148d5565b905060005b8381101561299c57600089828151811061282957612829614801565b6020026020010151905061284a84826020015161386e90919063ffffffff16565b6128ab5760405162461bcd60e51b815260206004820152602c60248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f554e60448201526b1313d0d2d25391d7d410549560a21b60648201526084016107a3565b6020810151815190945083811161291d5760405162461bcd60e51b815260206004820152603060248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f535460448201526f0415254494e475f54494d455354414d560841b60648201526084016107a3565b601487018054600180820183556000928352602092839020855160029093020182815585840151519101819055604080519283529282015291945084918a917f9ad21f79ce9c3c640f4c7e4d5cccb24f33967153042855c93f33f9cb457b7095910160405180910390a2505080806129949061482d565b91505061280d565b506129a8826001613875565b612a065760405162461bcd60e51b815260206004820152602960248201527f536f6d61537461727465723a20554e4c4f434b494e475f504152545f4e4f545f604482015268455155414c5f4f4e4560b81b60648201526084016107a3565b505050600190810154909a909950975050505050505050565b60408051808201909152600080825260208201526040805180820190915260008082526020820152600080612a5386612d2e565b9050612a5e816131a2565b6001600160a01b0385166000908152601590910160209081526040918290206005810154835180850185528254815260018301548185015284518086019095526002830154855260039092015492840192909252945090925090509250925092565b60003381612acd85612d2e565b9050612ad8816131a2565b60148101548410612b375760405162461bcd60e51b815260206004820152602360248201527f536f6d61537461727465723a20494e56414c49445f494e54455256414c5f494e6044820152620888ab60eb1b60648201526084016107a3565b6000816014018581548110612b4e57612b4e614801565b90600052602060002090600202019050612b654290565b81541115612bbf5760405162461bcd60e51b815260206004820152602160248201527f536f6d61537461727465723a20494e54455256414c5f4e4f545f5354415254456044820152601160fa1b60648201526084016107a3565b6001600160a01b038316600090815260158301602052604090206005810154861015612c3c5760405162461bcd60e51b815260206004820152602660248201527f536f6d61537461727465723a20494e54455256414c5f414c52454144595f554e6044820152651313d0d2d15160d21b60648201526084016107a3565b6002810154604080516020810190915260018401548152600091612c639161255c91613821565b6003830154909150600090612c7890836148d5565b6003840183905590508015612ce9576007850154612ca0906001600160a01b031687836133af565b856001600160a01b031685600101547fbc32d6ae85e398c3597f134c5c6c033c48e3e00da9908577c909df0cf607470183604051612ce091815260200190565b60405180910390a35b612cf488600161345d565b60059093019290925550935050505092915050565b60006001600160e01b0319821663b55bd4f760e01b14806106725750610672826138bf565b610164546000908210612d835760405162461bcd60e51b815260206004820152601f60248201527f536f6d61537461727465723a20494e56414c49445f504f4f4c5f494e4445580060448201526064016107a3565b6101648281548110612d9757612d97614801565b90600052602060002090601602019050919050565b6002815460ff166002811115612dc457612dc4614459565b14610d565760405162461bcd60e51b815260206004820152601c60248201527f536f6d61537461727465723a204e4f545f4c494e4541525f504f4f4c0000000060448201526064016107a3565b60128201548110612e645760405162461bcd60e51b815260206004820181905260248201527f536f6d61537461727465723a20494e56414c49445f4c494d49545f494e44455860448201526064016107a3565b5050565b60408051838152602081018390527f57f1ae35d0f26aa32535cf261cd0e6a226bb599a160b37666998e6aeb0f52270910160405180910390a16000612eac83612d2e565b601301919091555050565b6000804290508086602001511015612ed157602086018190525b60a0860151612ee19060016138f4565b612f2d5760405162461bcd60e51b815260206004820152601c60248201527f536f6d61537461727465723a20494e56414c49445f50455243454e540000000060448201526064016107a3565b8560400151866020015110612f925760405162461bcd60e51b815260206004820152602560248201527f536f6d61537461727465723a20494e56414c49445f454e44494e475f54494d4560448201526405354414d560dc1b60648201526084016107a3565b50610164805460018101808355600083815291929083908110612fb757612fb7614801565b60009182526020909120600160169092020181810184905580549092508591839160ff191690836002811115612fef57612fef614459565b0217905550865160038201556020808801516004830155604080890151600584015560608901516006840180546001600160a01b039283166001600160a01b03199182161790915560808b015160078601805491909316911617905560a089015151600884015560c0890151516009840155805160018082528183019092529182810190803683375050815161308e9260128501925060200190613ece565b508581600c016006016000815481106130a9576130a9614801565b90600052602060002001819055508481600c0160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086608001516001600160a01b031687606001516001600160a01b03167f6d0a80f2ee73de8861b1887eb263d606bb9e1b85beff2d71b45b913b0f9aed3186858b600001518c602001518d604001518e60a00151600001518f60c00151600001518f60405161315898979695949392919061492f565b60405180910390a36040516001600160a01b0386169083907f1db9920ce261cf5299c96ab18ed9969b1b467e3ac5f5e7a33656d6471495cf0790600090a39150505b949350505050565b6001815460ff1660028111156131ba576131ba614459565b14610d565760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a204e4f545f494e54455256414c5f504f4f4c000060448201526064016107a3565b61320f61393e565b6034805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60118201546001600160a01b03828116911614612e645760405162461bcd60e51b815260206004820152601e60248201527f536f6d61537461727465723a205045524d495353494f4e5f44454e494544000060448201526064016107a3565b600e8101546000036132c75750565b600e8101546040805160208101909152600883015481526000916132f3916132ee91613821565b613989565b60068301546001600160a01b03166000908152610165602052604090205490915061331e908261345d565b60068301546001600160a01b031660009081526101656020526040812091909155600e83015461334e9083613439565b600f840154909150613360908261345d565b600f8401556000600e840155600183015460408051838152602081018590527f969043bab89ac5dd319ed2e1356119888d1624898734ac8516a120bea7fb4260910160405180910390a2505050565b6040516001600160a01b03831660248201526044810182905261341290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139d8565b505050565b6001600160a01b03811660009081526001830160205260408120541515611839565b600061183982846148d5565b60006118398284614973565b600061183982846149a0565b600061183982846149b4565b60008183106134785781611839565b5090919050565b600154610100900460ff166134a65760405162461bcd60e51b81526004016107a3906149c7565b6040805160008152602081019091526134be90613aaa565b565b6134c8613b0a565b6034805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861323c3390565b6135088160016138f4565b61356c5760405162461bcd60e51b815260206004820152602f60248201527f536f6d61537461727465723a20494e56414c49445f494d4d4544494154454c5960448201526e17d5539313d0d2d25391d7d4105495608a1b60648201526084016107a3565b8051600283018190556001830154604051918252907f4b934b79ea913cbf45273ed2d6516ef75fd53b22d460b29bfc3627bdda76103f9060200160405180910390a25050565b60606001600160a01b0383163b61361a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107a3565b600080846001600160a01b0316846040516136359190614a12565b600060405180830381855af49150503d8060008114613670576040519150601f19603f3d011682016040523d82523d6000602084013e613675565b606091505b509150915061369d8282604051806060016040528060278152602001614b8660279139613b52565b95945050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526136de9085906323b872dd60e01b906084016133db565b50505050565b6001600160a01b03811660009081526015840160205260408120805460128601805486949392849291811061371b5761371b614801565b90600052602060002001549050808260000160010154106137925760405162461bcd60e51b815260206004820152602b60248201527f536f6d61537461727465723a204143434f554e545f5041594d454e545f4c494d60448201526a125517d15610d15151115160aa1b60648201526084016107a3565b600182015481906137a3908661345d565b11156137bc5760018201546137b9908290613439565b93505b6040805160208101909152600988015481526137dc9061255c9086613821565b600c88015490935083111561381757600c870154604080516020810190915260098901548152909350613814906132ee908590613b8b565b93505b5050935093915050565b604080516020810190915260008152604051806020016040528083856000015161384b9190614973565b90529392505050565b60006138626012600a614b12565b825161067291906149a0565b5190511190565b60006138836012600a614b12565b61388f906000196149a0565b82111561389e57506000610672565b6138aa6012600a614b12565b6138b49083614973565b835114905092915050565b60006001600160e01b0319821663d86f1ca160e01b148061067257506301ffc9a760e01b6001600160e01b0319831614610672565b60006139026012600a614b12565b61390e906000196149a0565b82111561391d57506001610672565b6139296012600a614b12565b6139339083614973565b835110905092915050565b613946610f18565b6134be5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107a3565b6000806139986012600a614b12565b83516139a49190614b1e565b116139b05760006139b3565b60015b60ff166139c26012600a614b12565b83516139ce91906149a0565b61067291906149b4565b6000613a2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bdf9092919063ffffffff16565b8051909150156134125780806020019051810190613a4b91906148b3565b6134125760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107a3565b600154610100900460ff16613ad15760405162461bcd60e51b81526004016107a3906149c7565b613ad9613bee565b613ae1613bee565b613ae9613bee565b613af1613bee565b613af9613c15565b613b01613bee565b610d5681613c48565b613b12610f18565b156134be5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107a3565b60608315613b61575081611839565b825115613b715782518084602001fd5b8160405162461bcd60e51b81526004016107a39190614b32565b604080516020810190915260008152604080516020810190915282518190613bb56012600a614b12565b613bc16012600a614b12565b613bcb9190614973565b613bd59087614973565b61384b91906149a0565b606061319a8484600085613cba565b600154610100900460ff166134be5760405162461bcd60e51b81526004016107a3906149c7565b600154610100900460ff16613c3c5760405162461bcd60e51b81526004016107a3906149c7565b6034805460ff19169055565b600154610100900460ff16613c6f5760405162461bcd60e51b81526004016107a3906149c7565b60005b8151811015612e6457613ca9828281518110613c9057613c90614801565b602002602001015161012e613deb90919063ffffffff16565b50613cb38161482d565b9050613c72565b606082471015613d1b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107a3565b6001600160a01b0385163b613d725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107a3565b600080866001600160a01b03168587604051613d8e9190614a12565b60006040518083038185875af1925050503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b5091509150613de0828286613b52565b979650505050505050565b6000611839836001600160a01b0384166000613e1a838360009081526001919091016020526040902054151590565b613e5057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610672565b506000610672565b6040518060e0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001613eae6040518060200160405280600081525090565b8152602001613ec96040518060200160405280600081525090565b905290565b828054828255906000526020600020908101928215613f09579160200282015b82811115613f09578251825591602001919060010190613eee565b50613f15929150613f19565b5090565b5b80821115613f155760008155600101613f1a565b600060208284031215613f4057600080fd5b81356001600160e01b03198116811461183957600080fd5b600060208284031215613f6a57600080fd5b5035919050565b805182526020810151602083015260408101516040830152606081015160018060a01b038082166060850152806080840151166080850152505060a08101515160a083015260c08101515160c08301525050565b6101408101613fd48286613f71565b835160e08301528251610100830152602083015161012083015261319a565b6001600160a01b0381168114610d5657600080fd5b60006020828403121561401a57600080fd5b813561183981613ff3565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561405e5761405e614025565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561408d5761408d614025565b604052919050565b600067ffffffffffffffff8211156140af576140af614025565b5060051b60200190565b6000806000606084860312156140ce57600080fd5b833592506020808501359250604085013567ffffffffffffffff8111156140f457600080fd5b8501601f8101871361410557600080fd5b803561411861411382614095565b614064565b81815260059190911b8201830190838101908983111561413757600080fd5b928401925b8284101561415e57833561414f81613ff3565b8252928401929084019061413c565b80955050505050509250925092565b6000806040838503121561418057600080fd5b50508035926020909101359150565b6000602082840312156141a157600080fd5b6040516020810181811067ffffffffffffffff821117156141c4576141c4614025565b6040529135825250919050565b600060e082840312156141e357600080fd5b60405160e0810181811067ffffffffffffffff8211171561420657614206614025565b8060405250809150823581526020830135602082015260408301356040820152606083013561423481613ff3565b6060820152608083013561424781613ff3565b60808201526142598460a0850161418f565b60a082015261426b8460c0850161418f565b60c08201525092915050565b600080600080610140858703121561428e57600080fd5b61429886866141d1565b935060e0850135925061010085013591506101208501356142b881613ff3565b939692955090935050565b60006101208083016142d58488613f71565b855160e085015261010084019190915283519081905261014083019060209081860160005b82811015614322578151805186528401515184860152604090940193908301906001016142fa565b509298975050505050505050565b60008060006060848603121561434557600080fd5b833561435081613ff3565b9250602084013561436081613ff3565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156143a157815187529582019590820190600101614385565b509495945050505050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160018060a01b0380821660a08501528060a08601511660c0850152505060c08301516101008060e0850152614415610120850183614371565b60e095909501519301929092525090919050565b6000806040838503121561443c57600080fd5b82359150602083013561444e81613ff3565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061448d57634e487b7160e01b600052602160045260246000fd5b9052565b61010081016144a0828561446f565b6118396020830184613f71565b60008060008060008061018087890312156144c757600080fd5b6144d188886141d1565b955060e0870135945061010087013593506101208701356144f181613ff3565b925061450188610140890161418f565b915061016087013590509295509295509295565b6000806020838503121561452857600080fd5b823567ffffffffffffffff8082111561454057600080fd5b818501915085601f83011261455457600080fd5b81358181111561456357600080fd5b8660208260051b850101111561457857600080fd5b60209290920196919550909350505050565b60005b838110156145a557818101518382015260200161458d565b50506000910152565b600081518084526145c681602086016020860161458a565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561462f57603f1988860301845261461d8583516145ae565b94509285019290850190600101614601565b5092979650505050505050565b6000806040838503121561464f57600080fd5b823561465a81613ff3565b9150602083013561444e81613ff3565b60608101614678828561446f565b611839602083018480518252602090810151910152565b6000806000606084860312156146a457600080fd5b505081359360208301359350604090920135919050565b60008060008060008061018087890312156146d557600080fd5b6146df88886141d1565b955060e0870135945061010087013593506101208701356146ff81613ff3565b925061470f88610140890161418f565b915061016087013567ffffffffffffffff81111561472c57600080fd5b8701601f8101891361473d57600080fd5b8035602061474d61411383614095565b82815260069290921b8301810191818101908c84111561476c57600080fd5b938201935b838510156147b8576040858e03121561478a5760008081fd5b61479261403b565b853581526147a28e85880161418f565b8185015282526040949094019390820190614771565b80955050505050509295509295509295565b6020808252601b908201527f536f6d61537461727465723a204f4e4c595f57484954454c4953540000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161483f5761483f614817565b5060010190565b60006020828403121561485857600080fd5b815161183981613ff3565b60006020828403121561487557600080fd5b5051919050565b60208082526017908201527f536f6d61537461727465723a204f4e4c595f41444d494e000000000000000000604082015260600190565b6000602082840312156148c557600080fd5b8151801515811461183957600080fd5b8181038181111561067257610672614817565b6000808335601e198436030181126148ff57600080fd5b83018035915067ffffffffffffffff82111561491a57600080fd5b6020019150368190038213156126a657600080fd5b610100810161493e828b61446f565b602082019890985260408101969096526060860194909452608085019290925260a084015260c083015260e090910152919050565b808202811582820484141761067257610672614817565b634e487b7160e01b600052601260045260246000fd5b6000826149af576149af61498a565b500490565b8082018082111561067257610672614817565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251614a2481846020870161458a565b9190910192915050565b600181815b80851115614a69578160001904821115614a4f57614a4f614817565b80851615614a5c57918102915b93841c9390800290614a33565b509250929050565b600082614a8057506001610672565b81614a8d57506000610672565b8160018114614aa35760028114614aad57614ac9565b6001915050610672565b60ff841115614abe57614abe614817565b50506001821b610672565b5060208310610133831016604e8410600b8410161715614aec575081810a610672565b614af68383614a2e565b8060001904821115614b0a57614b0a614817565b029392505050565b60006118398383614a71565b600082614b2d57614b2d61498a565b500690565b60208152600061183960208301846145ae56fecb2590299b882c6299c8ef896a52287c54a181c6babb62570e406d882308f8d07be88a9a9026c272688107a93f41943f9afa8e325f874917736dd2606a525fcd416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
