{
  "_format": "hh-sol-artifact-1",
  "contractName": "QueryService",
  "sourceName": "contracts/services/QueryService.sol",
  "abi": [
    {
      "inputs": [],
      "name": "FLAVOR",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flavor",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getAsset",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "issuer",
                  "type": "address"
                }
              ],
              "internalType": "struct Structs.AssetCommonState",
              "name": "asset",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.AssetCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "assetName",
          "type": "string"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getAssetForName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "issuer",
                  "type": "address"
                }
              ],
              "internalType": "struct Structs.AssetCommonState",
              "name": "asset",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.AssetCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getAssetsForIssuer",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "issuer",
                  "type": "address"
                }
              ],
              "internalType": "struct Structs.AssetCommonState",
              "name": "asset",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.AssetCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "issuerName",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getAssetsForIssuerName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "issuer",
                  "type": "address"
                }
              ],
              "internalType": "struct Structs.AssetCommonState",
              "name": "asset",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.AssetCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "campaign",
          "type": "address"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaign",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "issuerName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignForIssuerNameInvestor",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithNameAndInvestment[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "campaignName",
          "type": "string"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignForName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForAsset",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForAssetInvestor",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithNameAndInvestment[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "assetName",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForAssetName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "assetName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForAssetNameInvestor",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithNameAndInvestment[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForIssuer",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForIssuerInvestor",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithNameAndInvestment[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "issuerName",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getCampaignsForIssuerName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "softCap",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "finalized",
                  "type": "bool"
                },
                {
                  "internalType": "bool",
                  "name": "canceled",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "pricePerToken",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fundsRaised",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokensSold",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.CampaignCommonState",
              "name": "campaign",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.CampaignCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getIssuer",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "walletApprover",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                }
              ],
              "internalType": "struct Structs.IssuerCommonState",
              "name": "issuer",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.IssuerCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "issuerName",
          "type": "string"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getIssuerForName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "walletApprover",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                }
              ],
              "internalType": "struct Structs.IssuerCommonState",
              "name": "issuer",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.IssuerCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "factories",
          "type": "address[]"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getIssuers",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stablecoin",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "walletApprover",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                }
              ],
              "internalType": "struct Structs.IssuerCommonState",
              "name": "issuer",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.IssuerCommonStateWithName[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "distributor",
          "type": "address"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getSnapshotDistributor",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "totalPayoutsCreated",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalPayoutsAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.SnapshotDistributorCommonState",
              "name": "distributor",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.SnapshotDistributorCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "distributorName",
          "type": "string"
        },
        {
          "internalType": "contract INameRegistry",
          "name": "nameRegistry",
          "type": "address"
        }
      ],
      "name": "getSnapshotDistributorForName",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "string",
                  "name": "flavor",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "version",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "info",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "totalPayoutsCreated",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalPayoutsAmount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Structs.SnapshotDistributorCommonState",
              "name": "distributor",
              "type": "tuple"
            },
            {
              "internalType": "string",
              "name": "mappedName",
              "type": "string"
            }
          ],
          "internalType": "struct Structs.SnapshotDistributorCommonStateWithName",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract IAssetCommon",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "contract IToken",
          "name": "stablecoin",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "tokenValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061432e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063aeb6f49a116100c3578063d7c387dd1161007c578063d7c387dd14610328578063f2d18d051461033b578063f59e4f651461034e578063f622360f14610356578063fd72f76d14610369578063ffa1ad741461037c57610158565b8063aeb6f49a1461028f578063b25d65ed146102a2578063bd1b5728146102c2578063c1bec260146102d5578063ce6fa9e9146102e8578063d23c16751461030857610158565b806358c1c4991161011557806358c1c4991461020e578063606475d21461021657806360f3c95f14610236578063781dda4b146102565780639b10bd7a14610269578063ad96a3361461027c57610158565b806301a21a281461015d57806303e60a561461018657806312d805fe146101a657806320a7b63e146101c65780634623fa4f146101e657806354fd4d50146101f9575b600080fd5b61017061016b366004613543565b610384565b60405161017d9190613f84565b60405180910390f35b610199610194366004613543565b610421565b60405161017d9190613f71565b6101b96101b4366004613a16565b6104b4565b60405161017d919061407f565b6101d96101d4366004613267565b610652565b60405161017d9190613e2e565b6101996101f436600461333a565b610c81565b610201610d97565b60405161017d9190613f5e565b610201610db7565b6102296102243660046134eb565b610de1565b60405161017d9190613eb8565b610249610244366004613543565b610e79565b60405161017d9190613f97565b6101d9610264366004613480565b610f0c565b6102296102773660046132d9565b610fa4565b6101d961028a366004613267565b6114d0565b61022961029d3660046134eb565b611aef565b6102b56102b03660046134eb565b611b7c565b60405161017d9190613dce565b6102496102d036600461333a565b611c09565b6102b56102e33660046132d9565b611cc2565b6102fb6102f636600461340a565b6121df565b60405161017d9190613f0b565b61031b61031636600461333a565b6126f4565b60405161017d9190613faa565b61031b610336366004613543565b6127ad565b6102296103493660046132d9565b612840565b610201612d5d565b6101d9610364366004613480565b612d85565b61017061037736600461333a565b612e13565b610201612ecc565b61038c612eee565b6040516314afcdbb60e21b81526000906001600160a01b038416906352bf36ec906103bb908790600401613f5e565b60206040518083038186803b1580156103d357600080fd5b505afa1580156103e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040b919061324b565b90506104178184612e13565b9150505b92915050565b610429612f0e565b604051630cd5286d60e41b81526000906001600160a01b0384169063cd5286d090610458908790600401613f5e565b60206040518083038186803b15801561047057600080fd5b505afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a8919061324b565b90506104178184610c81565b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156104ef57600080fd5b505afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190613a5d565b61053290600a614179565b846001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056b57600080fd5b505afa15801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a391906139fe565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105dc57600080fd5b505afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190613a5d565b61061f90600a614179565b610629858961424a565b610633919061424a565b61063d9190614113565b6106479190614113565b90505b949350505050565b606082516000141561069757604080516000808252602082019092529061068f565b61067c612f21565b8152602001906001900390816106745790505b50905061064a565b60008084516001600160401b038111156106c157634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156106ea578160200160208202803683370190505b50905060005b85518110156107f057600086828151811061071b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628a6040518263ffffffff1660e01b815260040161074e9190613dba565b60006040518083038186803b15801561076657600080fd5b505afa15801561077a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107a29190810190613372565b5190506107af81856140fb565b9350808383815181106107d257634e487b7160e01b600052603260045260246000fd5b602090810291909101015250806107e881614299565b9150506106f0565b5081610831576040805160008082526020820190925290610827565b610814612f21565b81526020019060019003908161080c5790505b509250505061064a565b6000826001600160401b0381111561085957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561089257816020015b61087f612f21565b8152602001906001900390816108775790505b5090506000805b8751811015610c73578381815181106108c257634e487b7160e01b600052603260045260246000fd5b6020026020010151600014156108d757610c61565b60008882815181106108f957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628c6040518263ffffffff1660e01b815260040161092c9190613dba565b60006040518083038186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109809190810190613372565b905060005b8583815181106109a557634e487b7160e01b600052603260045260246000fd5b6020026020010151811015610c5e5760008282815181106109d657634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060800160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610a2457600080fd5b505afa158015610a38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a6091908101906136bd565b81526020018b6001600160a01b031663044ae09d868681518110610a9457634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610ab89190613dba565b60006040518083038186803b158015610ad057600080fd5b505afa158015610ae4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0c919081019061344e565b8152602001826001600160a01b031663a96b7f058f6040518263ffffffff1660e01b8152600401610b3d9190613dba565b60206040518083038186803b158015610b5557600080fd5b505afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906139fe565b8152602001826001600160a01b031663ed0ea0038f6040518263ffffffff1660e01b8152600401610bbe9190613dba565b60206040518083038186803b158015610bd657600080fd5b505afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e91906139fe565b815250868681518110610c3157634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480610c4790614299565b955050508080610c5690614299565b915050610985565b50505b80610c6b81614299565b915050610899565b509098975050505050505050565b610c89612f0e565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610ccd57600080fd5b505afa158015610ce1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d099190810190613576565b8152602001836001600160a01b031663aafa6272866040518263ffffffff1660e01b8152600401610d3a9190613dba565b60006040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e919081019061344e565b90529392505050565b6040805180820190915260068152650625c605c62760d31b602082015290565b6040518060400160405280600e81526020016d517565727953657276696365563160901b81525081565b60606000826001600160a01b03166380793ab8866040518263ffffffff1660e01b8152600401610e119190613f5e565b60206040518083038186803b158015610e2957600080fd5b505afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e61919061324b565b9050610e6e818585610fa4565b9150505b9392505050565b610e81612f4f565b60405163100f275760e31b81526000906001600160a01b038416906380793ab890610eb0908790600401613f5e565b60206040518083038186803b158015610ec857600080fd5b505afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f00919061324b565b90506104178184611c09565b60606000826001600160a01b03166380793ab8876040518263ffffffff1660e01b8152600401610f3c9190613f5e565b60206040518083038186803b158015610f5457600080fd5b505afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c919061324b565b9050610f9a818686866114d0565b9695505050505050565b6060825160001415610fe9576040805160008082526020820190925290610fe1565b610fce612eee565b815260200190600190039081610fc65790505b509050610e72565b60008084516001600160401b0381111561101357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561103c578160200160208202803683370190505b50905060005b855181101561114257600086828151811061106d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a90896040518263ffffffff1660e01b81526004016110a09190613dba565b60006040518083038186803b1580156110b857600080fd5b505afa1580156110cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f49190810190613372565b51905061110181856140fb565b93508083838151811061112457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061113a81614299565b915050611042565b5081611183576040805160008082526020820190925290611179565b611166612eee565b81526020019060019003908161115e5790505b5092505050610e72565b6000826001600160401b038111156111ab57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111e457816020015b6111d1612eee565b8152602001906001900390816111c95790505b5090506000805b87518110156114c35783818151811061121457634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611229576114b1565b600088828151811061124b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908b6040518263ffffffff1660e01b815260040161127e9190613dba565b60006040518083038186803b15801561129657600080fd5b505afa1580156112aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112d29190810190613372565b905060005b8583815181106112f757634e487b7160e01b600052603260045260246000fd5b60200260200101518110156114ae57600082828151811061132857634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561137657600080fd5b505afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113b291908101906136bd565b81526020018b6001600160a01b031663044ae09d8686815181106113e657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161140a9190613dba565b60006040518083038186803b15801561142257600080fd5b505afa158015611436573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261145e919081019061344e565b81525086868151811061148157634e487b7160e01b600052603260045260246000fd5b6020026020010181905250848061149790614299565b9550505080806114a690614299565b9150506112d7565b50505b806114bb81614299565b9150506111eb565b5090979650505050505050565b606082516000141561151457604080516000808252602082019092529061068f565b6114fa612f21565b8152602001906001900390816114f257905050905061064a565b60008084516001600160401b0381111561153e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611567578160200160208202803683370190505b50905060005b855181101561166d57600086828151811061159857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908a6040518263ffffffff1660e01b81526004016115cb9190613dba565b60006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190613372565b51905061162c81856140fb565b93508083838151811061164f57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061166581614299565b91505061156d565b50816116ad576040805160008082526020820190925290610827565b611691612f21565b815260200190600190039081611689579050509250505061064a565b6000826001600160401b038111156116d557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561170e57816020015b6116fb612f21565b8152602001906001900390816116f35790505b5090506000805b8751811015610c735783818151811061173e57634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561175357611add565b600088828151811061177557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908c6040518263ffffffff1660e01b81526004016117a89190613dba565b60006040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117fc9190810190613372565b905060005b85838151811061182157634e487b7160e01b600052603260045260246000fd5b6020026020010151811015611ada57600082828151811061185257634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060800160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118dc91908101906136bd565b81526020018b6001600160a01b031663044ae09d86868151811061191057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016119349190613dba565b60006040518083038186803b15801561194c57600080fd5b505afa158015611960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611988919081019061344e565b8152602001826001600160a01b031663a96b7f058f6040518263ffffffff1660e01b81526004016119b99190613dba565b60206040518083038186803b1580156119d157600080fd5b505afa1580156119e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0991906139fe565b8152602001826001600160a01b031663ed0ea0038f6040518263ffffffff1660e01b8152600401611a3a9190613dba565b60206040518083038186803b158015611a5257600080fd5b505afa158015611a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8a91906139fe565b815250868681518110611aad57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480611ac390614299565b955050508080611ad290614299565b915050611801565b50505b80611ae781614299565b915050611715565b60606000826001600160a01b031663cd5286d0866040518263ffffffff1660e01b8152600401611b1f9190613f5e565b60206040518083038186803b158015611b3757600080fd5b505afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061324b565b9050610e6e818585612840565b60606000826001600160a01b03166380793ab8866040518263ffffffff1660e01b8152600401611bac9190613f5e565b60206040518083038186803b158015611bc457600080fd5b505afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc919061324b565b9050610e6e818585611cc2565b611c11612f4f565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015611c5557600080fd5b505afa158015611c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c91919081019061380c565b8152602001836001600160a01b03166307ec312a866040518263ffffffff1660e01b8152600401610d3a9190613dba565b6060825160001415611d06576040805160008082526020820190925290610fe1565b611cec612f0e565b815260200190600190039081611ce4579050509050610e72565b60008084516001600160401b03811115611d3057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b8551811015611e5f576000868281518110611d8a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a90896040518263ffffffff1660e01b8152600401611dbd9190613dba565b60006040518083038186803b158015611dd557600080fd5b505afa158015611de9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e119190810190613372565b519050611e1e81856140fb565b935080838381518110611e4157634e487b7160e01b600052603260045260246000fd5b60209081029190910101525080611e5781614299565b915050611d5f565b5081611e9f576040805160008082526020820190925290611179565b611e83612f0e565b815260200190600190039081611e7b5790505092505050610e72565b6000826001600160401b03811115611ec757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611f0057816020015b611eed612f0e565b815260200190600190039081611ee55790505b5090506000805b87518110156114c357838181518110611f3057634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611f45576121cd565b6000888281518110611f6757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908b6040518263ffffffff1660e01b8152600401611f9a9190613dba565b60006040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fee9190810190613372565b905060005b85838151811061201357634e487b7160e01b600052603260045260246000fd5b60200260200101518110156121ca57600082828151811061204457634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561209257600080fd5b505afa1580156120a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120ce9190810190613576565b81526020018b6001600160a01b031663aafa627286868151811061210257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016121269190613dba565b60006040518083038186803b15801561213e57600080fd5b505afa158015612152573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261217a919081019061344e565b81525086868151811061219d57634e487b7160e01b600052603260045260246000fd5b602002602001018190525084806121b390614299565b9550505080806121c290614299565b915050611ff3565b50505b806121d781614299565b915050611f07565b606082516000141561222457604080516000808252602082019092529061221c565b612209612f4f565b8152602001906001900390816122015790505b50905061041b565b60008084516001600160401b0381111561224e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612277578160200160208202803683370190505b50905060005b85518110156123725760008682815181106122a857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663d35fdd796040518163ffffffff1660e01b815260040160006040518083038186803b1580156122e857600080fd5b505afa1580156122fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123249190810190613372565b51905061233181856140fb565b93508083838151811061235457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061236a81614299565b91505061227d565b50816123b35760408051600080825260208201909252906123a9565b612396612f4f565b81526020019060019003908161238e5790505b509250505061041b565b6000826001600160401b038111156123db57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561241457816020015b612401612f4f565b8152602001906001900390816123f95790505b5090506000805b87518110156126e85783818151811061244457634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612459576126d6565b600088828151811061247b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663d35fdd796040518163ffffffff1660e01b815260040160006040518083038186803b1580156124bb57600080fd5b505afa1580156124cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f79190810190613372565b905060005b85838151811061251c57634e487b7160e01b600052603260045260246000fd5b60200260200101518110156126d357600082828151811061254d57634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561259b57600080fd5b505afa1580156125af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125d7919081019061380c565b81526020018b6001600160a01b03166307ec312a86868151811061260b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161262f9190613dba565b60006040518083038186803b15801561264757600080fd5b505afa15801561265b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612683919081019061344e565b8152508686815181106126a657634e487b7160e01b600052603260045260246000fd5b602002602001018190525084806126bc90614299565b9550505080806126cb90614299565b9150506124fc565b50505b806126e081614299565b91505061241b565b50909695505050505050565b6126fc612f62565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261277c9190810190613900565b8152602001836001600160a01b031663da8fd7e7866040518263ffffffff1660e01b8152600401610d3a9190613dba565b6127b5612f62565b60405163401b2b6d60e11b81526000906001600160a01b0384169063803656da906127e4908790600401613f5e565b60206040518083038186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061324b565b905061041781846126f4565b6060825160001415612884576040805160008082526020820190925290610fe1565b61286a612eee565b815260200190600190039081612862579050509050610e72565b60008084516001600160401b038111156128ae57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156128d7578160200160208202803683370190505b50905060005b85518110156129dd57600086828151811061290857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f2862896040518263ffffffff1660e01b815260040161293b9190613dba565b60006040518083038186803b15801561295357600080fd5b505afa158015612967573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261298f9190810190613372565b51905061299c81856140fb565b9350808383815181106129bf57634e487b7160e01b600052603260045260246000fd5b602090810291909101015250806129d581614299565b9150506128dd565b5081612a1d576040805160008082526020820190925290611179565b612a01612eee565b8152602001906001900390816129f95790505092505050610e72565b6000826001600160401b03811115612a4557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612a7e57816020015b612a6b612eee565b815260200190600190039081612a635790505b5090506000805b87518110156114c357838181518110612aae57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612ac357612d4b565b6000888281518110612ae557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628b6040518263ffffffff1660e01b8152600401612b189190613dba565b60006040518083038186803b158015612b3057600080fd5b505afa158015612b44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b6c9190810190613372565b905060005b858381518110612b9157634e487b7160e01b600052603260045260246000fd5b6020026020010151811015612d48576000828281518110612bc257634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015612c1057600080fd5b505afa158015612c24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c4c91908101906136bd565b81526020018b6001600160a01b031663044ae09d868681518110612c8057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401612ca49190613dba565b60006040518083038186803b158015612cbc57600080fd5b505afa158015612cd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cf8919081019061344e565b815250868681518110612d1b57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480612d3190614299565b955050508080612d4090614299565b915050612b71565b50505b80612d5581614299565b915050612a85565b60408051808201909152600e81526d517565727953657276696365563160901b602082015290565b60606000826001600160a01b031663cd5286d0876040518263ffffffff1660e01b8152600401612db59190613f5e565b60206040518083038186803b158015612dcd57600080fd5b505afa158015612de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e05919061324b565b9050610f9a81868686610652565b612e1b612eee565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015612e5f57600080fd5b505afa158015612e73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e9b91908101906136bd565b8152602001836001600160a01b031663044ae09d866040518263ffffffff1660e01b8152600401610d3a9190613dba565b604051806040016040528060068152602001650625c605c62760d31b81525081565b6040518060400160405280612f01612f75565b8152602001606081525090565b6040518060400160405280612f01613005565b6040518060800160405280612f34612f75565b81526020016060815260200160008152602001600081525090565b6040518060400160405280612f01613073565b6040518060400160405280612f016130d4565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806101400160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681525090565b6040518060e00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b604051806101000160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160008152602001600081525090565b805161313f816142e0565b919050565b600082601f830112613154578081fd5b81356020613169613164836140b1565b614088565b8281528181019085830183850287018401881015613185578586fd5b855b858110156114c357813561319a816142e0565b84529284019290840190600101613187565b8051801515811461313f57600080fd5b600082601f8301126131cc578081fd5b81356131da613164826140d4565b8181528460208386010111156131ee578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613218578081fd5b8151613226613164826140d4565b81815284602083860101111561323a578283fd5b61064a826020830160208701614269565b60006020828403121561325c578081fd5b8151610e72816142e0565b6000806000806080858703121561327c578283fd5b8435613287816142e0565b93506020850135613297816142e0565b925060408501356001600160401b038111156132b1578283fd5b6132bd87828801613144565b92505060608501356132ce816142e0565b939692955090935050565b6000806000606084860312156132ed578081fd5b83356132f8816142e0565b925060208401356001600160401b03811115613312578182fd5b61331e86828701613144565b925050604084013561332f816142e0565b809150509250925092565b6000806040838503121561334c578182fd5b8235613357816142e0565b91506020830135613367816142e0565b809150509250929050565b60006020808385031215613384578182fd5b82516001600160401b03811115613399578283fd5b8301601f810185136133a9578283fd5b80516133b7613164826140b1565b81815283810190838501858402850186018910156133d3578687fd5b8694505b838510156133fe5780516133ea816142e0565b8352600194909401939185019185016133d7565b50979650505050505050565b6000806040838503121561341c578182fd5b82356001600160401b03811115613431578283fd5b61343d85828601613144565b9250506020830135613367816142e0565b60006020828403121561345f578081fd5b81516001600160401b03811115613474578182fd5b61041784828501613208565b60008060008060808587031215613495578182fd5b84356001600160401b03808211156134ab578384fd5b6134b7888389016131bc565b9550602087013591506134c9826142e0565b909350604086013590808211156134de578384fd5b506132bd87828801613144565b6000806000606084860312156134ff578081fd5b83356001600160401b0380821115613515578283fd5b613521878388016131bc565b94506020860135915080821115613536578283fd5b5061331e86828701613144565b60008060408385031215613555578182fd5b82356001600160401b0381111561356a578283fd5b61343d858286016131bc565b600060208284031215613587578081fd5b81516001600160401b038082111561359d578283fd5b81840191506101408083870312156135b3578384fd5b6135bc81614088565b90508251828111156135cc578485fd5b6135d887828601613208565b8252506020830151828111156135ec578485fd5b6135f887828601613208565b60208301525061360a60408401613134565b604082015261361b60608401613134565b6060820152608083015182811115613631578485fd5b61363d87828601613208565b60808301525060a083015182811115613654578485fd5b61366087828601613208565b60a08301525060c083015182811115613677578485fd5b61368387828601613208565b60c08301525060e08381015190820152610100808401519082015261012091506136ae828401613134565b91810191909152949350505050565b6000602082840312156136ce578081fd5b81516001600160401b03808211156136e4578283fd5b81840191506101a08083870312156136fa578384fd5b61370381614088565b9050825182811115613713578485fd5b61371f87828601613208565b825250602083015182811115613733578485fd5b61373f87828601613208565b60208301525061375160408401613134565b604082015261376260608401613134565b6060820152608083015182811115613778578485fd5b61378487828601613208565b60808301525061379660a08401613134565b60a08201526137a760c08401613134565b60c082015260e083015160e082015261010091506137c68284016131ac565b8282015261012091506137da8284016131ac565b918101919091526101408281015190820152610160808301519082015261018091820151918101919091529392505050565b60006020828403121561381d578081fd5b81516001600160401b0380821115613833578283fd5b9083019060e08286031215613846578283fd5b61385060e0614088565b82518281111561385e578485fd5b61386a87828601613208565b82525060208301518281111561387e578485fd5b61388a87828601613208565b60208301525061389c60408401613134565b60408201526138ad60608401613134565b60608201526138be60808401613134565b60808201526138cf60a08401613134565b60a082015260c0830151828111156138e5578485fd5b6138f187828601613208565b60c08301525095945050505050565b600060208284031215613911578081fd5b81516001600160401b0380821115613927578283fd5b818401915061010080838703121561393d578384fd5b61394681614088565b9050825182811115613956578485fd5b61396287828601613208565b825250602083015182811115613976578485fd5b61398287828601613208565b60208301525061399460408401613134565b60408201526139a560608401613134565b60608201526080830151828111156139bb578485fd5b6139c787828601613208565b6080830152506139d960a08401613134565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b600060208284031215613a0f578081fd5b5051919050565b60008060008060808587031215613a2b578182fd5b843593506020850135613a3d816142e0565b92506040850135613a4d816142e0565b9396929550929360600135925050565b600060208284031215613a6e578081fd5b815160ff81168114610e72578182fd5b6001600160a01b03169052565b15159052565b60008151808452613aa9816020860160208601614269565b601f01601f19169290920160200192915050565b60008151604084528051610140806040870152613ade610180870183613a91565b91506020830151603f1980888503016060890152613afc8483613a91565b935060408501519150613b126080890183613a7e565b60608501519150613b2660a0890183613a7e565b60808501519150808885030160c0890152613b418483613a91565b935060a08501519150808885030160e0890152613b5e8483613a91565b935060c085015191506101008189860301818a0152613b7d8584613a91565b945060e08601519250610120915082828a015280860151848a015250808501519450505050613bb0610160860183613a7e565b602084015191508481036020860152613bc98183613a91565b95945050505050565b6000815160408452613be76040850182613c00565b905060208301518482036020860152613bc98282613a91565b60006101a08251818552613c1682860182613a91565b91505060208301518482036020860152613c308282613a91565b9150506040830151613c456040860182613a7e565b506060830151613c586060860182613a7e565b5060808301518482036080860152613c708282613a91565b91505060a0830151613c8560a0860182613a7e565b5060c0830151613c9860c0860182613a7e565b5060e083015160e085015261010080840151613cb682870182613a8b565b505061012080840151613ccb82870182613a8b565b5050610140838101519085015261016080840151908501526101809283015192909301919091525090565b6000815160408452805160e06040860152613d15610120860182613a91565b90506020820151603f1980878403016060880152613d338383613a91565b60408501516001600160a01b0390811660808a810191909152606087015190911660a08a01528501519093509150613d6e60c0880183613a7e565b60a08401519150613d8260e0880183613a7e565b60c0840151935080878403016101008801525050613da08183613a91565b91505060208301518482036020860152613bc98282613a91565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613e0f858351613abd565b94509285019290850190600101613df3565b5092979650505050505050565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015610c7357603f19898403018552815160808151818652613e7882870182613c00565b915050888201518582038a870152613e908282613a91565b838a0151878b0152606093840151939096019290925250509386019390860190600101613e52565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613ef9858351613bd2565b94509285019290850190600101613edd565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613f4c858351613cf6565b94509285019290850190600101613f30565b600060208252610e726020830184613a91565b600060208252610e726020830184613abd565b600060208252610e726020830184613bd2565b600060208252610e726020830184613cf6565b6000602082528251604060208401528051610100806060860152613fd2610160860183613a91565b91506020830151605f1980878503016080880152613ff08483613a91565b93506040850151915061400660a0880183613a7e565b6060850151915061401a60c0880183613a7e565b60808501519150808785030160e0880152506140368382613a91565b92505060a083015161404a82870182613a7e565b505060c082015161012085015260e0909101516101408401526020840151838203601f1901604085015290613bc98183613a91565b90815260200190565b6040518181016001600160401b03811182821017156140a9576140a96142ca565b604052919050565b60006001600160401b038211156140ca576140ca6142ca565b5060209081020190565b60006001600160401b038211156140ed576140ed6142ca565b50601f01601f191660200190565b6000821982111561410e5761410e6142b4565b500190565b60008261412e57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116141455750614170565b818704821115614157576141576142b4565b8086161561416457918102915b9490941c938002614136565b94509492505050565b6000610e7260001960ff85168460008261419557506001610e72565b816141a257506000610e72565b81600181146141b857600281146141c2576141ef565b6001915050610e72565b60ff8411156141d3576141d36142b4565b6001841b9150848211156141e9576141e96142b4565b50610e72565b5060208310610133831016604e8410600b8410161715614222575081810a8381111561421d5761421d6142b4565b610e72565b61422f8484846001614133565b808604821115614241576142416142b4565b02949350505050565b6000816000190483118215151615614264576142646142b4565b500290565b60005b8381101561428457818101518382015260200161426c565b83811115614293576000848401525b50505050565b60006000198214156142ad576142ad6142b4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142f557600080fd5b5056fea2646970667358221220afabe328a8e1c99e90b18d3286106940e3040faf084ec51c1a1830112989d97764736f6c63430008000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063aeb6f49a116100c3578063d7c387dd1161007c578063d7c387dd14610328578063f2d18d051461033b578063f59e4f651461034e578063f622360f14610356578063fd72f76d14610369578063ffa1ad741461037c57610158565b8063aeb6f49a1461028f578063b25d65ed146102a2578063bd1b5728146102c2578063c1bec260146102d5578063ce6fa9e9146102e8578063d23c16751461030857610158565b806358c1c4991161011557806358c1c4991461020e578063606475d21461021657806360f3c95f14610236578063781dda4b146102565780639b10bd7a14610269578063ad96a3361461027c57610158565b806301a21a281461015d57806303e60a561461018657806312d805fe146101a657806320a7b63e146101c65780634623fa4f146101e657806354fd4d50146101f9575b600080fd5b61017061016b366004613543565b610384565b60405161017d9190613f84565b60405180910390f35b610199610194366004613543565b610421565b60405161017d9190613f71565b6101b96101b4366004613a16565b6104b4565b60405161017d919061407f565b6101d96101d4366004613267565b610652565b60405161017d9190613e2e565b6101996101f436600461333a565b610c81565b610201610d97565b60405161017d9190613f5e565b610201610db7565b6102296102243660046134eb565b610de1565b60405161017d9190613eb8565b610249610244366004613543565b610e79565b60405161017d9190613f97565b6101d9610264366004613480565b610f0c565b6102296102773660046132d9565b610fa4565b6101d961028a366004613267565b6114d0565b61022961029d3660046134eb565b611aef565b6102b56102b03660046134eb565b611b7c565b60405161017d9190613dce565b6102496102d036600461333a565b611c09565b6102b56102e33660046132d9565b611cc2565b6102fb6102f636600461340a565b6121df565b60405161017d9190613f0b565b61031b61031636600461333a565b6126f4565b60405161017d9190613faa565b61031b610336366004613543565b6127ad565b6102296103493660046132d9565b612840565b610201612d5d565b6101d9610364366004613480565b612d85565b61017061037736600461333a565b612e13565b610201612ecc565b61038c612eee565b6040516314afcdbb60e21b81526000906001600160a01b038416906352bf36ec906103bb908790600401613f5e565b60206040518083038186803b1580156103d357600080fd5b505afa1580156103e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040b919061324b565b90506104178184612e13565b9150505b92915050565b610429612f0e565b604051630cd5286d60e41b81526000906001600160a01b0384169063cd5286d090610458908790600401613f5e565b60206040518083038186803b15801561047057600080fd5b505afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a8919061324b565b90506104178184610c81565b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156104ef57600080fd5b505afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190613a5d565b61053290600a614179565b846001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056b57600080fd5b505afa15801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a391906139fe565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105dc57600080fd5b505afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190613a5d565b61061f90600a614179565b610629858961424a565b610633919061424a565b61063d9190614113565b6106479190614113565b90505b949350505050565b606082516000141561069757604080516000808252602082019092529061068f565b61067c612f21565b8152602001906001900390816106745790505b50905061064a565b60008084516001600160401b038111156106c157634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156106ea578160200160208202803683370190505b50905060005b85518110156107f057600086828151811061071b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628a6040518263ffffffff1660e01b815260040161074e9190613dba565b60006040518083038186803b15801561076657600080fd5b505afa15801561077a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107a29190810190613372565b5190506107af81856140fb565b9350808383815181106107d257634e487b7160e01b600052603260045260246000fd5b602090810291909101015250806107e881614299565b9150506106f0565b5081610831576040805160008082526020820190925290610827565b610814612f21565b81526020019060019003908161080c5790505b509250505061064a565b6000826001600160401b0381111561085957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561089257816020015b61087f612f21565b8152602001906001900390816108775790505b5090506000805b8751811015610c73578381815181106108c257634e487b7160e01b600052603260045260246000fd5b6020026020010151600014156108d757610c61565b60008882815181106108f957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628c6040518263ffffffff1660e01b815260040161092c9190613dba565b60006040518083038186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109809190810190613372565b905060005b8583815181106109a557634e487b7160e01b600052603260045260246000fd5b6020026020010151811015610c5e5760008282815181106109d657634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060800160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610a2457600080fd5b505afa158015610a38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a6091908101906136bd565b81526020018b6001600160a01b031663044ae09d868681518110610a9457634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610ab89190613dba565b60006040518083038186803b158015610ad057600080fd5b505afa158015610ae4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0c919081019061344e565b8152602001826001600160a01b031663a96b7f058f6040518263ffffffff1660e01b8152600401610b3d9190613dba565b60206040518083038186803b158015610b5557600080fd5b505afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906139fe565b8152602001826001600160a01b031663ed0ea0038f6040518263ffffffff1660e01b8152600401610bbe9190613dba565b60206040518083038186803b158015610bd657600080fd5b505afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e91906139fe565b815250868681518110610c3157634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480610c4790614299565b955050508080610c5690614299565b915050610985565b50505b80610c6b81614299565b915050610899565b509098975050505050505050565b610c89612f0e565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610ccd57600080fd5b505afa158015610ce1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d099190810190613576565b8152602001836001600160a01b031663aafa6272866040518263ffffffff1660e01b8152600401610d3a9190613dba565b60006040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e919081019061344e565b90529392505050565b6040805180820190915260068152650625c605c62760d31b602082015290565b6040518060400160405280600e81526020016d517565727953657276696365563160901b81525081565b60606000826001600160a01b03166380793ab8866040518263ffffffff1660e01b8152600401610e119190613f5e565b60206040518083038186803b158015610e2957600080fd5b505afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e61919061324b565b9050610e6e818585610fa4565b9150505b9392505050565b610e81612f4f565b60405163100f275760e31b81526000906001600160a01b038416906380793ab890610eb0908790600401613f5e565b60206040518083038186803b158015610ec857600080fd5b505afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f00919061324b565b90506104178184611c09565b60606000826001600160a01b03166380793ab8876040518263ffffffff1660e01b8152600401610f3c9190613f5e565b60206040518083038186803b158015610f5457600080fd5b505afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c919061324b565b9050610f9a818686866114d0565b9695505050505050565b6060825160001415610fe9576040805160008082526020820190925290610fe1565b610fce612eee565b815260200190600190039081610fc65790505b509050610e72565b60008084516001600160401b0381111561101357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561103c578160200160208202803683370190505b50905060005b855181101561114257600086828151811061106d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a90896040518263ffffffff1660e01b81526004016110a09190613dba565b60006040518083038186803b1580156110b857600080fd5b505afa1580156110cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f49190810190613372565b51905061110181856140fb565b93508083838151811061112457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061113a81614299565b915050611042565b5081611183576040805160008082526020820190925290611179565b611166612eee565b81526020019060019003908161115e5790505b5092505050610e72565b6000826001600160401b038111156111ab57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111e457816020015b6111d1612eee565b8152602001906001900390816111c95790505b5090506000805b87518110156114c35783818151811061121457634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611229576114b1565b600088828151811061124b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908b6040518263ffffffff1660e01b815260040161127e9190613dba565b60006040518083038186803b15801561129657600080fd5b505afa1580156112aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112d29190810190613372565b905060005b8583815181106112f757634e487b7160e01b600052603260045260246000fd5b60200260200101518110156114ae57600082828151811061132857634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561137657600080fd5b505afa15801561138a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113b291908101906136bd565b81526020018b6001600160a01b031663044ae09d8686815181106113e657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161140a9190613dba565b60006040518083038186803b15801561142257600080fd5b505afa158015611436573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261145e919081019061344e565b81525086868151811061148157634e487b7160e01b600052603260045260246000fd5b6020026020010181905250848061149790614299565b9550505080806114a690614299565b9150506112d7565b50505b806114bb81614299565b9150506111eb565b5090979650505050505050565b606082516000141561151457604080516000808252602082019092529061068f565b6114fa612f21565b8152602001906001900390816114f257905050905061064a565b60008084516001600160401b0381111561153e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611567578160200160208202803683370190505b50905060005b855181101561166d57600086828151811061159857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908a6040518263ffffffff1660e01b81526004016115cb9190613dba565b60006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190613372565b51905061162c81856140fb565b93508083838151811061164f57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061166581614299565b91505061156d565b50816116ad576040805160008082526020820190925290610827565b611691612f21565b815260200190600190039081611689579050509250505061064a565b6000826001600160401b038111156116d557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561170e57816020015b6116fb612f21565b8152602001906001900390816116f35790505b5090506000805b8751811015610c735783818151811061173e57634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561175357611add565b600088828151811061177557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908c6040518263ffffffff1660e01b81526004016117a89190613dba565b60006040518083038186803b1580156117c057600080fd5b505afa1580156117d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117fc9190810190613372565b905060005b85838151811061182157634e487b7160e01b600052603260045260246000fd5b6020026020010151811015611ada57600082828151811061185257634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060800160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118dc91908101906136bd565b81526020018b6001600160a01b031663044ae09d86868151811061191057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016119349190613dba565b60006040518083038186803b15801561194c57600080fd5b505afa158015611960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611988919081019061344e565b8152602001826001600160a01b031663a96b7f058f6040518263ffffffff1660e01b81526004016119b99190613dba565b60206040518083038186803b1580156119d157600080fd5b505afa1580156119e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0991906139fe565b8152602001826001600160a01b031663ed0ea0038f6040518263ffffffff1660e01b8152600401611a3a9190613dba565b60206040518083038186803b158015611a5257600080fd5b505afa158015611a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8a91906139fe565b815250868681518110611aad57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480611ac390614299565b955050508080611ad290614299565b915050611801565b50505b80611ae781614299565b915050611715565b60606000826001600160a01b031663cd5286d0866040518263ffffffff1660e01b8152600401611b1f9190613f5e565b60206040518083038186803b158015611b3757600080fd5b505afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f919061324b565b9050610e6e818585612840565b60606000826001600160a01b03166380793ab8866040518263ffffffff1660e01b8152600401611bac9190613f5e565b60206040518083038186803b158015611bc457600080fd5b505afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc919061324b565b9050610e6e818585611cc2565b611c11612f4f565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015611c5557600080fd5b505afa158015611c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c91919081019061380c565b8152602001836001600160a01b03166307ec312a866040518263ffffffff1660e01b8152600401610d3a9190613dba565b6060825160001415611d06576040805160008082526020820190925290610fe1565b611cec612f0e565b815260200190600190039081611ce4579050509050610e72565b60008084516001600160401b03811115611d3057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b8551811015611e5f576000868281518110611d8a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a90896040518263ffffffff1660e01b8152600401611dbd9190613dba565b60006040518083038186803b158015611dd557600080fd5b505afa158015611de9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e119190810190613372565b519050611e1e81856140fb565b935080838381518110611e4157634e487b7160e01b600052603260045260246000fd5b60209081029190910101525080611e5781614299565b915050611d5f565b5081611e9f576040805160008082526020820190925290611179565b611e83612f0e565b815260200190600190039081611e7b5790505092505050610e72565b6000826001600160401b03811115611ec757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611f0057816020015b611eed612f0e565b815260200190600190039081611ee55790505b5090506000805b87518110156114c357838181518110611f3057634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611f45576121cd565b6000888281518110611f6757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663238c3a908b6040518263ffffffff1660e01b8152600401611f9a9190613dba565b60006040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fee9190810190613372565b905060005b85838151811061201357634e487b7160e01b600052603260045260246000fd5b60200260200101518110156121ca57600082828151811061204457634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561209257600080fd5b505afa1580156120a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120ce9190810190613576565b81526020018b6001600160a01b031663aafa627286868151811061210257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016121269190613dba565b60006040518083038186803b15801561213e57600080fd5b505afa158015612152573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261217a919081019061344e565b81525086868151811061219d57634e487b7160e01b600052603260045260246000fd5b602002602001018190525084806121b390614299565b9550505080806121c290614299565b915050611ff3565b50505b806121d781614299565b915050611f07565b606082516000141561222457604080516000808252602082019092529061221c565b612209612f4f565b8152602001906001900390816122015790505b50905061041b565b60008084516001600160401b0381111561224e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612277578160200160208202803683370190505b50905060005b85518110156123725760008682815181106122a857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663d35fdd796040518163ffffffff1660e01b815260040160006040518083038186803b1580156122e857600080fd5b505afa1580156122fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123249190810190613372565b51905061233181856140fb565b93508083838151811061235457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152508061236a81614299565b91505061227d565b50816123b35760408051600080825260208201909252906123a9565b612396612f4f565b81526020019060019003908161238e5790505b509250505061041b565b6000826001600160401b038111156123db57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561241457816020015b612401612f4f565b8152602001906001900390816123f95790505b5090506000805b87518110156126e85783818151811061244457634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612459576126d6565b600088828151811061247b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663d35fdd796040518163ffffffff1660e01b815260040160006040518083038186803b1580156124bb57600080fd5b505afa1580156124cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f79190810190613372565b905060005b85838151811061251c57634e487b7160e01b600052603260045260246000fd5b60200260200101518110156126d357600082828151811061254d57634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561259b57600080fd5b505afa1580156125af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125d7919081019061380c565b81526020018b6001600160a01b03166307ec312a86868151811061260b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161262f9190613dba565b60006040518083038186803b15801561264757600080fd5b505afa15801561265b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612683919081019061344e565b8152508686815181106126a657634e487b7160e01b600052603260045260246000fd5b602002602001018190525084806126bc90614299565b9550505080806126cb90614299565b9150506124fc565b50505b806126e081614299565b91505061241b565b50909695505050505050565b6126fc612f62565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261277c9190810190613900565b8152602001836001600160a01b031663da8fd7e7866040518263ffffffff1660e01b8152600401610d3a9190613dba565b6127b5612f62565b60405163401b2b6d60e11b81526000906001600160a01b0384169063803656da906127e4908790600401613f5e565b60206040518083038186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061324b565b905061041781846126f4565b6060825160001415612884576040805160008082526020820190925290610fe1565b61286a612eee565b815260200190600190039081612862579050509050610e72565b60008084516001600160401b038111156128ae57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156128d7578160200160208202803683370190505b50905060005b85518110156129dd57600086828151811061290857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f2862896040518263ffffffff1660e01b815260040161293b9190613dba565b60006040518083038186803b15801561295357600080fd5b505afa158015612967573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261298f9190810190613372565b51905061299c81856140fb565b9350808383815181106129bf57634e487b7160e01b600052603260045260246000fd5b602090810291909101015250806129d581614299565b9150506128dd565b5081612a1d576040805160008082526020820190925290611179565b612a01612eee565b8152602001906001900390816129f95790505092505050610e72565b6000826001600160401b03811115612a4557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612a7e57816020015b612a6b612eee565b815260200190600190039081612a635790505b5090506000805b87518110156114c357838181518110612aae57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612ac357612d4b565b6000888281518110612ae557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663498f28628b6040518263ffffffff1660e01b8152600401612b189190613dba565b60006040518083038186803b158015612b3057600080fd5b505afa158015612b44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b6c9190810190613372565b905060005b858381518110612b9157634e487b7160e01b600052603260045260246000fd5b6020026020010151811015612d48576000828281518110612bc257634e487b7160e01b600052603260045260246000fd5b602002602001015190506040518060400160405280826001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015612c1057600080fd5b505afa158015612c24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c4c91908101906136bd565b81526020018b6001600160a01b031663044ae09d868681518110612c8057634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401612ca49190613dba565b60006040518083038186803b158015612cbc57600080fd5b505afa158015612cd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cf8919081019061344e565b815250868681518110612d1b57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508480612d3190614299565b955050508080612d4090614299565b915050612b71565b50505b80612d5581614299565b915050612a85565b60408051808201909152600e81526d517565727953657276696365563160901b602082015290565b60606000826001600160a01b031663cd5286d0876040518263ffffffff1660e01b8152600401612db59190613f5e565b60206040518083038186803b158015612dcd57600080fd5b505afa158015612de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e05919061324b565b9050610f9a81868686610652565b612e1b612eee565b6040518060400160405280846001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015612e5f57600080fd5b505afa158015612e73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e9b91908101906136bd565b8152602001836001600160a01b031663044ae09d866040518263ffffffff1660e01b8152600401610d3a9190613dba565b604051806040016040528060068152602001650625c605c62760d31b81525081565b6040518060400160405280612f01612f75565b8152602001606081525090565b6040518060400160405280612f01613005565b6040518060800160405280612f34612f75565b81526020016060815260200160008152602001600081525090565b6040518060400160405280612f01613073565b6040518060400160405280612f016130d4565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806101400160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681525090565b6040518060e00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b604051806101000160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160008152602001600081525090565b805161313f816142e0565b919050565b600082601f830112613154578081fd5b81356020613169613164836140b1565b614088565b8281528181019085830183850287018401881015613185578586fd5b855b858110156114c357813561319a816142e0565b84529284019290840190600101613187565b8051801515811461313f57600080fd5b600082601f8301126131cc578081fd5b81356131da613164826140d4565b8181528460208386010111156131ee578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613218578081fd5b8151613226613164826140d4565b81815284602083860101111561323a578283fd5b61064a826020830160208701614269565b60006020828403121561325c578081fd5b8151610e72816142e0565b6000806000806080858703121561327c578283fd5b8435613287816142e0565b93506020850135613297816142e0565b925060408501356001600160401b038111156132b1578283fd5b6132bd87828801613144565b92505060608501356132ce816142e0565b939692955090935050565b6000806000606084860312156132ed578081fd5b83356132f8816142e0565b925060208401356001600160401b03811115613312578182fd5b61331e86828701613144565b925050604084013561332f816142e0565b809150509250925092565b6000806040838503121561334c578182fd5b8235613357816142e0565b91506020830135613367816142e0565b809150509250929050565b60006020808385031215613384578182fd5b82516001600160401b03811115613399578283fd5b8301601f810185136133a9578283fd5b80516133b7613164826140b1565b81815283810190838501858402850186018910156133d3578687fd5b8694505b838510156133fe5780516133ea816142e0565b8352600194909401939185019185016133d7565b50979650505050505050565b6000806040838503121561341c578182fd5b82356001600160401b03811115613431578283fd5b61343d85828601613144565b9250506020830135613367816142e0565b60006020828403121561345f578081fd5b81516001600160401b03811115613474578182fd5b61041784828501613208565b60008060008060808587031215613495578182fd5b84356001600160401b03808211156134ab578384fd5b6134b7888389016131bc565b9550602087013591506134c9826142e0565b909350604086013590808211156134de578384fd5b506132bd87828801613144565b6000806000606084860312156134ff578081fd5b83356001600160401b0380821115613515578283fd5b613521878388016131bc565b94506020860135915080821115613536578283fd5b5061331e86828701613144565b60008060408385031215613555578182fd5b82356001600160401b0381111561356a578283fd5b61343d858286016131bc565b600060208284031215613587578081fd5b81516001600160401b038082111561359d578283fd5b81840191506101408083870312156135b3578384fd5b6135bc81614088565b90508251828111156135cc578485fd5b6135d887828601613208565b8252506020830151828111156135ec578485fd5b6135f887828601613208565b60208301525061360a60408401613134565b604082015261361b60608401613134565b6060820152608083015182811115613631578485fd5b61363d87828601613208565b60808301525060a083015182811115613654578485fd5b61366087828601613208565b60a08301525060c083015182811115613677578485fd5b61368387828601613208565b60c08301525060e08381015190820152610100808401519082015261012091506136ae828401613134565b91810191909152949350505050565b6000602082840312156136ce578081fd5b81516001600160401b03808211156136e4578283fd5b81840191506101a08083870312156136fa578384fd5b61370381614088565b9050825182811115613713578485fd5b61371f87828601613208565b825250602083015182811115613733578485fd5b61373f87828601613208565b60208301525061375160408401613134565b604082015261376260608401613134565b6060820152608083015182811115613778578485fd5b61378487828601613208565b60808301525061379660a08401613134565b60a08201526137a760c08401613134565b60c082015260e083015160e082015261010091506137c68284016131ac565b8282015261012091506137da8284016131ac565b918101919091526101408281015190820152610160808301519082015261018091820151918101919091529392505050565b60006020828403121561381d578081fd5b81516001600160401b0380821115613833578283fd5b9083019060e08286031215613846578283fd5b61385060e0614088565b82518281111561385e578485fd5b61386a87828601613208565b82525060208301518281111561387e578485fd5b61388a87828601613208565b60208301525061389c60408401613134565b60408201526138ad60608401613134565b60608201526138be60808401613134565b60808201526138cf60a08401613134565b60a082015260c0830151828111156138e5578485fd5b6138f187828601613208565b60c08301525095945050505050565b600060208284031215613911578081fd5b81516001600160401b0380821115613927578283fd5b818401915061010080838703121561393d578384fd5b61394681614088565b9050825182811115613956578485fd5b61396287828601613208565b825250602083015182811115613976578485fd5b61398287828601613208565b60208301525061399460408401613134565b60408201526139a560608401613134565b60608201526080830151828111156139bb578485fd5b6139c787828601613208565b6080830152506139d960a08401613134565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b600060208284031215613a0f578081fd5b5051919050565b60008060008060808587031215613a2b578182fd5b843593506020850135613a3d816142e0565b92506040850135613a4d816142e0565b9396929550929360600135925050565b600060208284031215613a6e578081fd5b815160ff81168114610e72578182fd5b6001600160a01b03169052565b15159052565b60008151808452613aa9816020860160208601614269565b601f01601f19169290920160200192915050565b60008151604084528051610140806040870152613ade610180870183613a91565b91506020830151603f1980888503016060890152613afc8483613a91565b935060408501519150613b126080890183613a7e565b60608501519150613b2660a0890183613a7e565b60808501519150808885030160c0890152613b418483613a91565b935060a08501519150808885030160e0890152613b5e8483613a91565b935060c085015191506101008189860301818a0152613b7d8584613a91565b945060e08601519250610120915082828a015280860151848a015250808501519450505050613bb0610160860183613a7e565b602084015191508481036020860152613bc98183613a91565b95945050505050565b6000815160408452613be76040850182613c00565b905060208301518482036020860152613bc98282613a91565b60006101a08251818552613c1682860182613a91565b91505060208301518482036020860152613c308282613a91565b9150506040830151613c456040860182613a7e565b506060830151613c586060860182613a7e565b5060808301518482036080860152613c708282613a91565b91505060a0830151613c8560a0860182613a7e565b5060c0830151613c9860c0860182613a7e565b5060e083015160e085015261010080840151613cb682870182613a8b565b505061012080840151613ccb82870182613a8b565b5050610140838101519085015261016080840151908501526101809283015192909301919091525090565b6000815160408452805160e06040860152613d15610120860182613a91565b90506020820151603f1980878403016060880152613d338383613a91565b60408501516001600160a01b0390811660808a810191909152606087015190911660a08a01528501519093509150613d6e60c0880183613a7e565b60a08401519150613d8260e0880183613a7e565b60c0840151935080878403016101008801525050613da08183613a91565b91505060208301518482036020860152613bc98282613a91565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613e0f858351613abd565b94509285019290850190600101613df3565b5092979650505050505050565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015610c7357603f19898403018552815160808151818652613e7882870182613c00565b915050888201518582038a870152613e908282613a91565b838a0151878b0152606093840151939096019290925250509386019390860190600101613e52565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613ef9858351613bd2565b94509285019290850190600101613edd565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015613e2157603f19888603018452613f4c858351613cf6565b94509285019290850190600101613f30565b600060208252610e726020830184613a91565b600060208252610e726020830184613abd565b600060208252610e726020830184613bd2565b600060208252610e726020830184613cf6565b6000602082528251604060208401528051610100806060860152613fd2610160860183613a91565b91506020830151605f1980878503016080880152613ff08483613a91565b93506040850151915061400660a0880183613a7e565b6060850151915061401a60c0880183613a7e565b60808501519150808785030160e0880152506140368382613a91565b92505060a083015161404a82870182613a7e565b505060c082015161012085015260e0909101516101408401526020840151838203601f1901604085015290613bc98183613a91565b90815260200190565b6040518181016001600160401b03811182821017156140a9576140a96142ca565b604052919050565b60006001600160401b038211156140ca576140ca6142ca565b5060209081020190565b60006001600160401b038211156140ed576140ed6142ca565b50601f01601f191660200190565b6000821982111561410e5761410e6142b4565b500190565b60008261412e57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116141455750614170565b818704821115614157576141576142b4565b8086161561416457918102915b9490941c938002614136565b94509492505050565b6000610e7260001960ff85168460008261419557506001610e72565b816141a257506000610e72565b81600181146141b857600281146141c2576141ef565b6001915050610e72565b60ff8411156141d3576141d36142b4565b6001841b9150848211156141e9576141e96142b4565b50610e72565b5060208310610133831016604e8410600b8410161715614222575081810a8381111561421d5761421d6142b4565b610e72565b61422f8484846001614133565b808604821115614241576142416142b4565b02949350505050565b6000816000190483118215151615614264576142646142b4565b500290565b60005b8381101561428457818101518382015260200161426c565b83811115614293576000848401525b50505050565b60006000198214156142ad576142ad6142b4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142f557600080fd5b5056fea2646970667358221220afabe328a8e1c99e90b18d3286106940e3040faf084ec51c1a1830112989d97764736f6c63430008000033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
