{
  "_format": "hh-sol-artifact-1",
  "contractName": "InToken0OutToken0Snippet",
  "sourceName": "contracts/V3/snippet/InToken0OutToken0Snippet.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stateCounter_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "inBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "inTokenSlotIndex",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "erc",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "uint32",
                      "name": "attrId",
                      "type": "uint32"
                    },
                    {
                      "internalType": "int40",
                      "name": "attrAmount",
                      "type": "int40"
                    }
                  ],
                  "internalType": "struct Attribute.AttributeIn[]",
                  "name": "attrInList",
                  "type": "tuple[]"
                }
              ],
              "internalType": "struct Token.Token",
              "name": "inToken",
              "type": "tuple"
            }
          ],
          "internalType": "struct ISnippet.PreInputTokenParams",
          "name": "preInputToken",
          "type": "tuple"
        }
      ],
      "name": "preInputToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct ISnippet.TokenSnippet",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "inBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "inRound",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            }
          ],
          "internalType": "struct ISnippet.ExecuteDelayParams",
          "name": "executeDelay",
          "type": "tuple"
        }
      ],
      "name": "processExecuteDelayTime",
      "outputs": [
        {
          "internalType": "int32",
          "name": "",
          "type": "int32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "inBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "inRound",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "ruleDurationType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "ruleDelayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "ruleDelayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "erc",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "uint32",
                      "name": "attrId",
                      "type": "uint32"
                    },
                    {
                      "internalType": "int40",
                      "name": "attrAmount",
                      "type": "int40"
                    }
                  ],
                  "internalType": "struct Attribute.AttributeIn[]",
                  "name": "attrInList",
                  "type": "tuple[]"
                }
              ],
              "internalType": "struct Token.Token[]",
              "name": "inTokenList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct ISnippet.InitDelayParams",
          "name": "initDelay",
          "type": "tuple"
        }
      ],
      "name": "processInitDelayTime",
      "outputs": [
        {
          "internalType": "int32",
          "name": "",
          "type": "int32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "outBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "inTokenSlotIndex",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "erc",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "uint32",
                      "name": "attrId",
                      "type": "uint32"
                    },
                    {
                      "internalType": "int40",
                      "name": "attrAmount",
                      "type": "int40"
                    }
                  ],
                  "internalType": "struct Attribute.AttributeIn[]",
                  "name": "attrInList",
                  "type": "tuple[]"
                }
              ],
              "internalType": "struct Token.Token",
              "name": "inToken",
              "type": "tuple"
            }
          ],
          "internalType": "struct ISnippet.InputTokenParams",
          "name": "inputToken",
          "type": "tuple"
        }
      ],
      "name": "processInputToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct ISnippet.TokenSnippet",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "outBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "random",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "internalType": "struct ISnippet.TokenSlotDelayParams",
          "name": "tokenSlotDelay",
          "type": "tuple"
        }
      ],
      "name": "processInputTokenSlotDelayTime",
      "outputs": [
        {
          "internalType": "int32",
          "name": "",
          "type": "int32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "outBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "random",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "outTokenSlotIndex",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "erc",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "uint32",
                      "name": "attrId",
                      "type": "uint32"
                    },
                    {
                      "internalType": "int40",
                      "name": "attrAmount",
                      "type": "int40"
                    }
                  ],
                  "internalType": "struct Attribute.AttributeIn[]",
                  "name": "attrInList",
                  "type": "tuple[]"
                }
              ],
              "internalType": "struct Token.Token",
              "name": "outToken",
              "type": "tuple"
            }
          ],
          "internalType": "struct ISnippet.OutputTokenParams",
          "name": "outputToken",
          "type": "tuple"
        }
      ],
      "name": "processOutputToken",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct ISnippet.TokenSnippet",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "outBranch",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "random",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "internalType": "struct ISnippet.TokenSlotDelayParams",
          "name": "tokenSlotDelay",
          "type": "tuple"
        }
      ],
      "name": "processOutputTokenSlotDelayTime",
      "outputs": [
        {
          "internalType": "int32",
          "name": "",
          "type": "int32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051610f5e380380610f5e83398101604081905261002f9161007c565b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100af565b80516001600160a01b038116811461007757600080fd5b919050565b6000806040838503121561008f57600080fd5b61009883610060565b91506100a660208401610060565b90509250929050565b610ea0806100be6000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c806324d56ffe146100725780635de70a0d1461009b5780636557196a146100c2578063814645dc1461009b5780638cb665ff146100d05780639090fa45146100d0578063b6ee96de146100e3575b600080fd5b6100856100803660046104ed565b6100f1565b6040516100929190610614565b60405180910390f35b6100af6100a936600461073e565b50600090565b60405160039190910b8152602001610092565b6100af6100a936600461088a565b6100856100de366004610a5c565b610204565b6100af6100a9366004610a98565b6100f961021a565b61010161021a565b6001546060840151604051636c51371d60e11b815263ffffffff90911660048201526000916001600160a01b03169063d8a26e3a9060240160006040518083038186803b15801561015157600080fd5b505afa158015610165573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261018d9190810190610d30565b90508360a0015163ffffffff16600014156101fd578061014001516000815181106101ba576101ba610e54565b6020026020010151604001518260400181815250508061014001516000815181106101e7576101e7610e54565b6020026020010151606001518260600181815250505b5092915050565b61020c61021a565b61021461021a565b92915050565b6040518060a00160405280600060ff16815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561028d5761028d610255565b60405290565b604080519081016001600160401b038111828210171561028d5761028d610255565b60405160e081016001600160401b038111828210171561028d5761028d610255565b60405161014081016001600160401b038111828210171561028d5761028d610255565b60405161018081016001600160401b038111828210171561028d5761028d610255565b604051601f8201601f191681016001600160401b038111828210171561034557610345610255565b604052919050565b6001600160a01b038116811461036257600080fd5b50565b80356103708161034d565b919050565b63ffffffff8116811461036257600080fd5b803561037081610375565b60ff8116811461036257600080fd5b803561037081610392565b60006001600160401b038211156103c5576103c5610255565b5060051b60200190565b8060040b811461036257600080fd5b600060a082840312156103f057600080fd5b6103f861026b565b9050813561040581610392565b81526020828101356104168161034d565b82820152604083810135818401526060808501359084015260808401356001600160401b0381111561044757600080fd5b8401601f8101861361045857600080fd5b803561046b610466826103ac565b61031d565b81815260069190911b8201840190848101908883111561048a57600080fd5b928501925b828410156104dc5784848a0312156104a75760008081fd5b6104af610293565b84356104ba81610375565b8152848701356104c9816103cf565b818801528252928401929085019061048f565b608087015250939695505050505050565b6000602082840312156104ff57600080fd5b81356001600160401b038082111561051657600080fd5b9083019060e0828603121561052a57600080fd5b6105326102b5565b61053b83610365565b815261054960208401610387565b602082015261055a604084016103a1565b604082015261056b60608401610387565b60608201526080830135608082015261058660a08401610387565b60a082015260c08301358281111561059d57600080fd5b6105a9878286016103de565b60c08301525095945050505050565b60005b838110156105d35781810151838201526020016105bb565b838111156105e2576000848401525b50505050565b600081518084526106008160208601602086016105b8565b601f01601f19169290920160200192915050565b6000602080835260c080840160ff808751168487015283870151604060018060a01b03821681890152808901519150606082818a0152808a01519250608083818b0152808b0151935060a080818c015286855180895260e09850888d019150888160051b8e01018b8801975060005b8281101561072b578e820360df190184528851805163ffffffff1683528d8101518b168e8401528881015160ff16898401528781015160040b8884015286810151610100888501819052906106da828601826105e8565b915050868201516106f28886018263ffffffff169052565b508d8201516107058f86018260ff169052565b50908c01516001600160e01b031916928c0192909252978c0197928c0192600101610683565b509e9d5050505050505050505050505050565b600061010080838503121561075257600080fd5b604051908101906001600160401b038211818310171561077457610774610255565b81604052833591506107858261034d565b81815261079460208501610387565b60208201526107a5604085016103a1565b60408201526107b660608501610387565b6060820152608084013560808201526107d160a085016103a1565b60a08201526107e260c085016103a1565b60c08201526107f360e08501610365565b60e0820152949350505050565b600082601f83011261081157600080fd5b81356020610821610466836103ac565b82815260059290921b8401810191818101908684111561084057600080fd5b8286015b8481101561087f5780356001600160401b038111156108635760008081fd5b6108718986838b01016103de565b845250918301918301610844565b509695505050505050565b60006020828403121561089c57600080fd5b81356001600160401b03808211156108b357600080fd5b9083019061014082860312156108c857600080fd5b6108d06102d7565b6108d983610365565b81526108e760208401610387565b60208201526108f8604084016103a1565b6040820152610909606084016103a1565b606082015261091a608084016103a1565b608082015261092b60a08401610387565b60a082015261093c60c08401610387565b60c082015261094d60e08401610387565b60e0820152610100610960818501610387565b90820152610120838101358381111561097857600080fd5b61098488828701610800565b918301919091525095945050505050565b600060c082840312156109a757600080fd5b60405160c081016001600160401b0382821081831117156109ca576109ca610255565b81604052829350843591506109de8261034d565b9082526020840135906109f082610375565b81602084015260408501359150610a0682610392565b816040840152610a1860608601610387565b6060840152610a2960808601610387565b608084015260a0850135915080821115610a4257600080fd5b50610a4f858286016103de565b60a0830152505092915050565b600060208284031215610a6e57600080fd5b81356001600160401b03811115610a8457600080fd5b610a9084828501610995565b949350505050565b600060a08284031215610aaa57600080fd5b60405160a081018181106001600160401b0382111715610acc57610acc610255565b6040528235610ada8161034d565b81526020830135610aea81610375565b60208201526040830135610afd81610392565b60408201526060830135610b1081610392565b60608201526080830135610b2381610375565b60808201529392505050565b80516103708161034d565b805161037081610375565b805161037081610392565b600082601f830112610b6157600080fd5b81516020610b71610466836103ac565b82815260059290921b84018101918181019086841115610b9057600080fd5b8286015b8481101561087f5780516001600160401b0380821115610bb357600080fd5b9088019060a0828b03601f19011215610bcb57600080fd5b610bd361026b565b86830151610be081610392565b8152604083810151610bf18161034d565b828901526060848101518284015260808501519083015260a084015183811115610c1b5760008081fd5b8085019450508b603f850112610c3357600092508283fd5b878401519250610c45610466846103ac565b83815260069390931b8401810192888101908d851115610c655760008081fd5b948201945b84861015610cb75782868f031215610c825760008081fd5b610c8a610293565b8651610c9581610375565b8152868b0151610ca4816103cf565b818c015282529482019490890190610c6a565b6080840152505085525050918301918301610b94565b600082601f830112610cde57600080fd5b81516001600160401b03811115610cf757610cf7610255565b610d0a601f8201601f191660200161031d565b818152846020838601011115610d1f57600080fd5b610a908260208301602087016105b8565b600060208284031215610d4257600080fd5b81516001600160401b0380821115610d5957600080fd5b908301906101808286031215610d6e57600080fd5b610d766102fa565b610d7f83610b2f565b8152610d8d60208401610b2f565b6020820152610d9e60408401610b2f565b6040820152610daf60608401610b2f565b60608201526080830151608082015260a083015160a0820152610dd460c08401610b3a565b60c0820152610de560e08401610b3a565b60e0820152610100610df8818501610b3a565b90820152610120610e0a848201610b45565b908201526101408381015183811115610e2257600080fd5b610e2e88828701610b50565b8284015250506101608084015183811115610e4857600080fd5b61098488828701610ccd565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a0b168ba9b12997aab24fcff1ce467ac76ae8144ea6aab90911a75946f37490c64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061006d5760003560e01c806324d56ffe146100725780635de70a0d1461009b5780636557196a146100c2578063814645dc1461009b5780638cb665ff146100d05780639090fa45146100d0578063b6ee96de146100e3575b600080fd5b6100856100803660046104ed565b6100f1565b6040516100929190610614565b60405180910390f35b6100af6100a936600461073e565b50600090565b60405160039190910b8152602001610092565b6100af6100a936600461088a565b6100856100de366004610a5c565b610204565b6100af6100a9366004610a98565b6100f961021a565b61010161021a565b6001546060840151604051636c51371d60e11b815263ffffffff90911660048201526000916001600160a01b03169063d8a26e3a9060240160006040518083038186803b15801561015157600080fd5b505afa158015610165573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261018d9190810190610d30565b90508360a0015163ffffffff16600014156101fd578061014001516000815181106101ba576101ba610e54565b6020026020010151604001518260400181815250508061014001516000815181106101e7576101e7610e54565b6020026020010151606001518260600181815250505b5092915050565b61020c61021a565b61021461021a565b92915050565b6040518060a00160405280600060ff16815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561028d5761028d610255565b60405290565b604080519081016001600160401b038111828210171561028d5761028d610255565b60405160e081016001600160401b038111828210171561028d5761028d610255565b60405161014081016001600160401b038111828210171561028d5761028d610255565b60405161018081016001600160401b038111828210171561028d5761028d610255565b604051601f8201601f191681016001600160401b038111828210171561034557610345610255565b604052919050565b6001600160a01b038116811461036257600080fd5b50565b80356103708161034d565b919050565b63ffffffff8116811461036257600080fd5b803561037081610375565b60ff8116811461036257600080fd5b803561037081610392565b60006001600160401b038211156103c5576103c5610255565b5060051b60200190565b8060040b811461036257600080fd5b600060a082840312156103f057600080fd5b6103f861026b565b9050813561040581610392565b81526020828101356104168161034d565b82820152604083810135818401526060808501359084015260808401356001600160401b0381111561044757600080fd5b8401601f8101861361045857600080fd5b803561046b610466826103ac565b61031d565b81815260069190911b8201840190848101908883111561048a57600080fd5b928501925b828410156104dc5784848a0312156104a75760008081fd5b6104af610293565b84356104ba81610375565b8152848701356104c9816103cf565b818801528252928401929085019061048f565b608087015250939695505050505050565b6000602082840312156104ff57600080fd5b81356001600160401b038082111561051657600080fd5b9083019060e0828603121561052a57600080fd5b6105326102b5565b61053b83610365565b815261054960208401610387565b602082015261055a604084016103a1565b604082015261056b60608401610387565b60608201526080830135608082015261058660a08401610387565b60a082015260c08301358281111561059d57600080fd5b6105a9878286016103de565b60c08301525095945050505050565b60005b838110156105d35781810151838201526020016105bb565b838111156105e2576000848401525b50505050565b600081518084526106008160208601602086016105b8565b601f01601f19169290920160200192915050565b6000602080835260c080840160ff808751168487015283870151604060018060a01b03821681890152808901519150606082818a0152808a01519250608083818b0152808b0151935060a080818c015286855180895260e09850888d019150888160051b8e01018b8801975060005b8281101561072b578e820360df190184528851805163ffffffff1683528d8101518b168e8401528881015160ff16898401528781015160040b8884015286810151610100888501819052906106da828601826105e8565b915050868201516106f28886018263ffffffff169052565b508d8201516107058f86018260ff169052565b50908c01516001600160e01b031916928c0192909252978c0197928c0192600101610683565b509e9d5050505050505050505050505050565b600061010080838503121561075257600080fd5b604051908101906001600160401b038211818310171561077457610774610255565b81604052833591506107858261034d565b81815261079460208501610387565b60208201526107a5604085016103a1565b60408201526107b660608501610387565b6060820152608084013560808201526107d160a085016103a1565b60a08201526107e260c085016103a1565b60c08201526107f360e08501610365565b60e0820152949350505050565b600082601f83011261081157600080fd5b81356020610821610466836103ac565b82815260059290921b8401810191818101908684111561084057600080fd5b8286015b8481101561087f5780356001600160401b038111156108635760008081fd5b6108718986838b01016103de565b845250918301918301610844565b509695505050505050565b60006020828403121561089c57600080fd5b81356001600160401b03808211156108b357600080fd5b9083019061014082860312156108c857600080fd5b6108d06102d7565b6108d983610365565b81526108e760208401610387565b60208201526108f8604084016103a1565b6040820152610909606084016103a1565b606082015261091a608084016103a1565b608082015261092b60a08401610387565b60a082015261093c60c08401610387565b60c082015261094d60e08401610387565b60e0820152610100610960818501610387565b90820152610120838101358381111561097857600080fd5b61098488828701610800565b918301919091525095945050505050565b600060c082840312156109a757600080fd5b60405160c081016001600160401b0382821081831117156109ca576109ca610255565b81604052829350843591506109de8261034d565b9082526020840135906109f082610375565b81602084015260408501359150610a0682610392565b816040840152610a1860608601610387565b6060840152610a2960808601610387565b608084015260a0850135915080821115610a4257600080fd5b50610a4f858286016103de565b60a0830152505092915050565b600060208284031215610a6e57600080fd5b81356001600160401b03811115610a8457600080fd5b610a9084828501610995565b949350505050565b600060a08284031215610aaa57600080fd5b60405160a081018181106001600160401b0382111715610acc57610acc610255565b6040528235610ada8161034d565b81526020830135610aea81610375565b60208201526040830135610afd81610392565b60408201526060830135610b1081610392565b60608201526080830135610b2381610375565b60808201529392505050565b80516103708161034d565b805161037081610375565b805161037081610392565b600082601f830112610b6157600080fd5b81516020610b71610466836103ac565b82815260059290921b84018101918181019086841115610b9057600080fd5b8286015b8481101561087f5780516001600160401b0380821115610bb357600080fd5b9088019060a0828b03601f19011215610bcb57600080fd5b610bd361026b565b86830151610be081610392565b8152604083810151610bf18161034d565b828901526060848101518284015260808501519083015260a084015183811115610c1b5760008081fd5b8085019450508b603f850112610c3357600092508283fd5b878401519250610c45610466846103ac565b83815260069390931b8401810192888101908d851115610c655760008081fd5b948201945b84861015610cb75782868f031215610c825760008081fd5b610c8a610293565b8651610c9581610375565b8152868b0151610ca4816103cf565b818c015282529482019490890190610c6a565b6080840152505085525050918301918301610b94565b600082601f830112610cde57600080fd5b81516001600160401b03811115610cf757610cf7610255565b610d0a601f8201601f191660200161031d565b818152846020838601011115610d1f57600080fd5b610a908260208301602087016105b8565b600060208284031215610d4257600080fd5b81516001600160401b0380821115610d5957600080fd5b908301906101808286031215610d6e57600080fd5b610d766102fa565b610d7f83610b2f565b8152610d8d60208401610b2f565b6020820152610d9e60408401610b2f565b6040820152610daf60608401610b2f565b60608201526080830151608082015260a083015160a0820152610dd460c08401610b3a565b60c0820152610de560e08401610b3a565b60e0820152610100610df8818501610b3a565b90820152610120610e0a848201610b45565b908201526101408381015183811115610e2257600080fd5b610e2e88828701610b50565b8284015250506101608084015183811115610e4857600080fd5b61098488828701610ccd565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220a0b168ba9b12997aab24fcff1ce467ac76ae8144ea6aab90911a75946f37490c64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
