{
  "_format": "hh-sol-artifact-1",
  "contractName": "DNSSECImpl",
  "sourceName": "contracts/dnssec-oracle/DNSSECImpl.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_anchors",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "AlgorithmUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "DigestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Marker",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "NSEC3DigestUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "rrset",
          "type": "bytes"
        }
      ],
      "name": "RRSetUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "t",
          "type": "uint256"
        }
      ],
      "name": "Test",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "algorithms",
      "outputs": [
        {
          "internalType": "contract Algorithm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anchors",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "deleteType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "deleteName",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "nsec",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "deleteRRSet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "deleteType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "deleteName",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "closestEncloser",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "nextClosest",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "dnskey",
          "type": "bytes"
        }
      ],
      "name": "deleteRRSetNSEC3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "digests",
      "outputs": [
        {
          "internalType": "contract Digest",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "nsec3Digests",
      "outputs": [
        {
          "internalType": "contract NSEC3Digest",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "dnstype",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        }
      ],
      "name": "rrdata",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bytes20",
          "name": "",
          "type": "bytes20"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Algorithm",
          "name": "algo",
          "type": "address"
        }
      ],
      "name": "setAlgorithm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Digest",
          "name": "digest",
          "type": "address"
        }
      ],
      "name": "setDigest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract NSEC3Digest",
          "name": "digest",
          "type": "address"
        }
      ],
      "name": "setNSEC3Digest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature",
          "name": "input",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "submitRRSet",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature[]",
          "name": "input",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "_proof",
          "type": "bytes"
        }
      ],
      "name": "submitRRSets",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162003a4c38038062003a4c833981016040819052620000349162000226565b600180546001600160a01b0319163317905580516200005b90600090602084019062000180565b5060408051606081018252600080825263e090bba0602083015282519192830191620000889190620002fc565b60408051918290039091206001600160601b031916909152602b60009081527fc92a43746f20f69898978a3075767b860ba247ac0639d1831bf8c942c5db2389602090815283517f95c6356c1b7a542b884d2484ef785c9c7224e77e1016c20007bddc15c23b452f8054928601519585015160601c6801000000000000000002600160401b600160e01b031963ffffffff978816640100000000026001600160401b03199095169790931696909617929092171693909317909255517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b91620001719162000373565b60405180910390a15062000463565b8280546200018e9062000410565b90600052602060002090601f016020900481019282620001b25760008555620001fd565b82601f10620001cd57805160ff1916838001178555620001fd565b82800160010185558215620001fd579182015b82811115620001fd578251825591602001919060010190620001e0565b506200020b9291506200020f565b5090565b5b808211156200020b576000815560010162000210565b6000602080838503121562000239578182fd5b82516001600160401b038082111562000250578384fd5b818501915085601f83011262000264578384fd5b8151818111156200027957620002796200044d565b604051601f8201601f19908116603f01168101908382118183101715620002a457620002a46200044d565b816040528281528886848701011115620002bc578687fd5b8693505b82841015620002df5784840186015181850187015292850192620002c0565b82841115620002f057868684830101525b98975050505050505050565b60008083546200030c8162000410565b60018281168015620003275760018114620003395762000367565b60ff1984168752828701945062000367565b8786526020808720875b858110156200035e5781548a82015290840190820162000343565b50505082870194505b50929695505050505050565b604081526000600180604084015281606084015260206080818501528285546200039d8162000410565b80608088015260a085831660008114620003c05760018114620003d55762000402565b60ff1984168983015260c08901945062000402565b898852858820885b84811015620003fa5781548b8201850152908801908701620003dd565b8a0183019550505b509298975050505050505050565b600181811c908216806200042557607f821691505b602082108114156200044757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6135d980620004736000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806373cc48a61161008c57806398d35f201161006657806398d35f201461025b578063bd7ed31a14610263578063c327deef14610299578063d7b82ebe146102cf57600080fd5b806373cc48a6146101cd5780638438dc04146102285780638da5cb5b1461023b57600080fd5b806313af4035116100c857806313af40351461017457806328e7677d146101875780632c095cbb1461019a578063435cc162146101ad57600080fd5b8063020ed8d3146100ef578063087991bc146101045780630b1a249514610161575b600080fd5b6101026100fd366004612ff3565b6102e2565b005b610117610112366004612e47565b610396565b6040805163ffffffff94851681529390921660208401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016908201526060015b60405180910390f35b61010261016f366004612f20565b61040b565b610102610182366004612ca9565b6105fa565b610102610195366004612ff3565b610665565b6101026101a8366004612e8b565b610711565b6101c06101bb366004612cc5565b61084f565b60405161015891906130a2565b6102036101db366004612fd9565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610158565b610102610236366004612ff3565b6108fe565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101c06109aa565b610203610271366004612fd9565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102036102a7366004612fd9565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c06102dd366004612de6565b610a38565b60015473ffffffffffffffffffffffffffffffffffffffff16331461030657600080fd5b60ff821660008181526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b6000806000806002600087876040516103b0929190613092565b60408051918290039091208252602080830193909352908101600090812061ffff8b16825290925290205463ffffffff8082169550640100000000820416935068010000000000000000900460601b91505093509350939050565b8351602080860191909120600090815260028252604080822061ffff891683529092529081205463ffffffff16906104438584610a4d565b9050610450818784610b3e565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e081018290526101008101829052610120810191909152845151156104c2576104b58585610a4d565b90506104c2818885610b3e565b60006104cd83610b84565b602081015190915060fe16156104e257600080fd5b6104ed816027610be3565b1580156105125750610500816002610be3565b15806105125750610512816006610be3565b61051b57600080fd5b61052c898985610120015184610bf5565b156105805787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080547fffffffff000000000000000000000000000000000000000000000000000000001690556105ef565b61059f888461012001518385610120015161059a87610b84565b610c25565b156100ea5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080547fffffffff000000000000000000000000000000000000000000000000000000001690555b505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461061e57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461068957600080fd5b60ff821660008181526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7910161038a565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915261076e8383610a4d565b805190915061ffff16602f1461078357600080fd5b60a08101518451602080870191909120600090815260028252604080822061ffff8a16835290925220546107bd919063ffffffff16610d41565b6107c657600080fd5b60006107d182610d5a565b905080515160208201511015610843576107f2818361012001518789610db8565b50508251602080850191909120600090815260028252604080822061ffff881683529092522080547fffffffff00000000000000000000000000000000000000000000000000000000169055610849565b50600080fd5b50505050565b6060600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505b85518110156108f3576108df8682815181106108d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183610f63565b9150806108eb8161347b565b91505061088c565b5090505b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461092257600080fd5b60ff821660008181526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d910161038a565b600080546109b79061342d565b80601f01602080910402602001604051908101604052809291908181526020018280546109e39061342d565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b505050505081565b6060610a448383610f63565b90505b92915050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e0810182905261010081018290526101208101919091528251610aab9061118b565b9050610abb8160e00151836112cd565b610ac457600080fd5b6000610ad4828360000151611352565b604083015190915060ff16610aea8260006113fd565b14610af457600080fd5b61012082018190526080820151610b0b9042610d41565b610b1457600080fd5b610b22428360a00151610d41565b610b2b57600080fd5b610b378183868661147e565b5092915050565b610b4c8360a0015182610d41565b610b5557600080fd5b825161ffff16603214610b6757600080fd5b610b7683610120015183611582565b610b7f57600080fd5b505050565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a082015290610bbe83610d5a565b60a081015160c08201519192506108f791610bda9082906133dc565b835191906115f0565b6000610a448360a00151600084611737565b6000610c0282848661184d565b15610c1957610c118286610be3565b159050610c1d565b5060005b949350505050565b602081015160009060fe1615610c3a57600080fd5b6000610c4586611874565b90506000610c5285611874565b9050600080610c618a82611890565b610c6c9060016131b4565b60ff1690505b8951811015610d2f5783610c9e89610c9984858f51610c9191906133dc565b8f91906118db565b611984565b1415610d03576000610cbb87610c9985868f51610c9191906133dc565b90508660800151841015610ce7578381118015610cdb5750866080015181105b95505050505050610d38565b83811180610cdb57508660800151811095505050505050610d38565b905080610d108a82611890565b610d1b9060016131b4565b610d289060ff168261319c565b9050610c72565b50600093505050505b95945050505050565b600080610d4e8385613378565b60030b12159392505050565b610da86040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b610a478261010001516000611a45565b60a08401518451600090610dcc9083611aa6565b905060008660a001518760c00151610de491906133dc565b9050818111610df257600080fd5b6000610dfe8688611b24565b905080610e2a57610e1b610e12848661319c565b89519087611737565b15610e2557600080fd5b610e71565b8751600090610e3a9086866118db565b905060008213610e4957600080fd5b6000610e558983611b24565b12156105ef576000610e678883611b24565b126105ef57600080fd5b5050505050505050565b60c08101516020820181905281515111610e925750565b6000610ea682600001518360200151611aa6565b8260200151610eb5919061319c565b8251909150610ec49082611c77565b61ffff166040830152610ed860028261319c565b8251909150610ee79082611c77565b61ffff166060830152610efb60028261319c565b8251909150610f0a9082611c9f565b63ffffffff166080830152610f2060048261319c565b8251909150600090610f329083611c77565b61ffff169050610f4360028361319c565b60a084018190529150610f56818361319c565b60c0909301929092525050565b604080516101408101825260008082526020820181905291810182905260608181018390526080820183905260a0820183905260c082019290925260e0810182905261010081018290526101208101829052610fbf8484610a4d565b61012081015180516020918201206000908152600282526040808220845161ffff1683529092522080549192509068010000000000000000900460601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016156110435760a0820151815461103a919063ffffffff16610d41565b61104357600080fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301207fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168688019081526101208a0180518051908501206000908152600285528981208c5161ffff16825290945292889020965187549451915190961c68010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff918616640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b9261117692916130b5565b60405180910390a15061010001519392505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018190526101008201819052610120820152906111e6908390611c77565b61ffff1681526111f7826002611890565b60ff16602082015261120a826003611890565b60ff16604082015261121d826004611c9f565b63ffffffff9081166060830152611239908390600890611c9f16565b63ffffffff9081166080830152611255908390600c90611c9f16565b63ffffffff90811660a0830152611271908390601090611c7716565b61ffff1660c0820152611285826012611cc9565b60e08201819052516112c29061129c90601261319c565b8260e0015151601285516112b091906133dc565b6112ba91906133dc565b8491906118db565b610100820152919050565b6000806112e46112dd8483611aa6565b8490611c77565b8351602080860191909120865187830120600090815260028352604080822061ffff9095168252939092529190205468010000000000000000900460601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811691161491505092915050565b6060600061135f84610d5a565b90505b80515160208201511015610b3757606081015161ffff1660011461138557600080fd5b815161139b5761139481611ce4565b91506113d7565b602081015181516113ab91611aa6565b8251146113b757600080fd5b8051602082015183516113ce928592600092611d05565b6113d757600080fd5b8261ffff16816040015161ffff16146113ef57600080fd5b6113f881610e7b565b611362565b6000805b83518310611438577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006114448585611890565b60ff16905061145481600161319c565b61145e908561319c565b93508061146b5750610a44565b61147660018361319c565b915050611401565b83518360e0015151111561149157600080fd5b6114b66000858560e001515187516114a991906133dc565b60e0870151929190611d28565b6114bf57600080fd5b60006114cb8282611a45565b604081015190915061ffff16602b14156114f8576114ea848483611d5d565b6114f357600080fd5b61157b565b604081015161ffff1660301415611514576114ea848483611df6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f2076616c69642070726f6f6620666f756e6400000000000000000000000060448201526064015b60405180910390fd5b5050505050565b60008061158f8482611890565b61159a9060016131b4565b60ff16905060005b8351811015610c19576115b784828785611d28565b156115c757600192505050610a47565b6115d18482611890565b6115dc9060016131b4565b6115e99060ff168261319c565b90506115a2565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061162b838561319c565b905061164261163b60008661319c565b8690611890565b60ff16825261165561163b60018661319c565b60ff16602083015261167261166b60028661319c565b8690611c77565b61ffff166040830152600061169261168b60048761319c565b8790611890565b905061169f60058661319c565b94506116af868660ff84166118db565b60608401526116c160ff82168661319c565b945060006116cf8787611890565b905060208160ff1611156116e257600080fd5b6116ed60018761319c565b95506116fd878760ff8416611e9e565b608085015261170f60ff82168761319c565b95506117278661171f81866133dc565b8991906118db565b60a0850152509195945050505050565b600060ff600883811c82169183916117509186166131d9565b905060006117626007808716906133f3565b600160ff919091161b9050855b875181101561183f5760006117848983611890565b9050600061179d61179684600161319c565b8b90611890565b90508160ff168660ff1610156117bc57600096505050505050506108f7565b8160ff168660ff16141561181e578460ff168160ff16116117e657600096505050505050506108f7565b836118096117f760ff88168661319c565b61180290600261319c565b8c90611890565b1660ff166000141596505050505050506108f7565b6118298160026131b4565b6118369060ff168461319c565b9250505061176f565b506000979650505050505050565b60008061185a8584611984565b9050600061186785611874565b9190911495945050505050565b6000610a4760016118858484611890565b84919060ff16611edf565b60008282815181106118cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b016020015160f81c905092915050565b82516060906118ea838561319c565b11156118f557600080fd5b60008267ffffffffffffffff811115611937577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611961576020820181803683370190505b509050602080820190868601016119798282876121af565b509095945050505050565b815160ff166000908152600560205260408082205460608501518286015192517f68f9dab200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216926368f9dab2926119f592918791600401613113565b60206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612dce565b611a936040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c08101829052610a4781610e7b565b6000815b83518110611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000611aed8583611890565b60ff169050611afd81600161319c565b611b07908361319c565b915080611b145750611b1a565b50611aaa565b610c1d83826133dc565b6000611b308383612205565b15611b3d57506000610a47565b6000806000806000611b508860006113fd565b90506000611b5f8860006113fd565b90505b80821115611b8b57859350611b778987612223565b955081611b8381613416565b925050611b62565b81811115611bb457849250611ba08886612223565b945080611bac81613416565b915050611b8b565b600082118015611bcd5750611bcb89878a88611d28565b155b15611c0257859350611bdf8987612223565b9550849250611bee8886612223565b9450611bfb6001836133dc565b9150611bb4565b85611c17576000199650505050505050610a47565b84611c2b5760019650505050505050610a47565b611c6a611c3985600161319c565b611c438b87611890565b60ff168a611c5287600161319c565b611c5c8d89611890565b8e949392919060ff16612247565b9998505050505050505050565b8151600090611c8783600261319c565b1115611c9257600080fd5b50016002015161ffff1690565b8151600090611caf83600461319c565b1115611cba57600080fd5b50016004015163ffffffff1690565b60606000611cd78484611aa6565b9050610c1d8484836118db565b60208101518151606091610a4791611cfc9082611aa6565b845191906118db565b6000611d1284848461233c565b611d1d87878561233c565b149695505050505050565b6000611d418383848651611d3c91906133dc565b61233c565b611d538686878951611d3c91906133dc565b1495945050505050565b600080611d6985610d5a565b90505b80515160208201511015610c1957604081015161ffff16603014611d8f57600080fd5b6000611d9a82612360565b90506000611db5600083518461237c9092919063ffffffff16565b9050611dc38183898961241a565b15611de657611ddc611dd484611ce4565b868385612551565b93505050506108f7565b5050611df181610e7b565b611d6c565b6000611e0f8460e00151611e0984611ce4565b90612205565b611e1857600080fd5b81515160208301511015611e9457611e378460e00151611e0984611ce4565b611e4057600080fd5b6000611e4b83612360565b90506000611e66600083518461237c9092919063ffffffff16565b9050611e748183888861241a565b15611e84576001925050506108f7565b5050611e8f82610e7b565b611e18565b5060009392505050565b60006020821115611eae57600080fd5b8351611eba838561319c565b1115611ec557600080fd5b506020919092018101519190036101000a60001901191690565b60006034821115611eef57600080fd5b600080805b8481101561209257600087611f09838961319c565b81518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f30000000000000000000000000000000000000000000000000000000000000008110801590611fdb57507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b611fe457600080fd5b60405180608001604052806047815260200161355d6047913961200c603060f884901c6133dc565b81518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160209081015160f81c935083111561205b57600080fd5b6120666001876133dc565b8214156120735750612092565b5060059290921b60ff821617918061208a8161347b565b915050611ef4565b5060006120a08560056132e5565b90506120ad600886613496565b6120c2578160ff16600584901b179250612195565b6120cd600886613496565b600214156120fc5760028260ff16901c60ff16600384901b1792506002816120f591906133dc565b9050612195565b612107600886613496565b6004141561212f5760048260ff16901c60ff16600184901b1792506004816120f591906133dc565b61213a600886613496565b600514156121625760018260ff16901c60ff16600484901b1792506001816120f591906133dc565b61216d600886613496565b600714156100ea5760038260ff16901c60ff16600284901b1792506003816120f591906133dc565b6121a1816101006133dc565b9290921b9695505050505050565b602081106121e757815183526121c660208461319c565b92506121d360208361319c565b91506121e06020826133dc565b90506121af565b905182516020929092036101000a6000190180199091169116179052565b600081518351148015610a445750610a448360008460008751611d05565b600061222f8383611890565b60ff1661223d83600161319c565b610a44919061319c565b600084808310156122555750815b60208789018101908587010160005b8381101561232157825182518082146122f1576000602087111561228b57506000196122c7565b6001846122998960206133dc565b6122a3919061319c565b6122ae9060086132e5565b6122b990600261323d565b6122c391906133dc565b1990505b60006122d7838316858416613304565b905080156122ee5797506123329650505050505050565b50505b6122fc60208661319c565b945061230960208561319c565b9350505060208161231a919061319c565b9050612264565b5061232c8589613304565b93505050505b9695505050505050565b825160009061234b838561319c565b111561235657600080fd5b5091016020012090565b60a081015160c0820151606091610a4791611cfc9082906133dc565b60408051608081018252600080825260208201819052918101919091526060808201526123b46123ad60008561319c565b8590611c77565b61ffff1681526123cf6123c860028561319c565b8590611890565b60ff1660208201526123e56123c860038561319c565b60ff16604082015261240e6123fb60048561319c565b6124066004856133dc565b8691906118db565b60608201529392505050565b6000846020015160ff1660031461243357506000610c1d565b826020015160ff16856040015160ff161461245057506000610c1d565b600061245b85612652565b90508360c0015161ffff168161ffff161461247a576000915050610c1d565b85516101001661248e576000915050610c1d565b60408087015160ff16600090815260036020908152908290205485519186015192517fde8f50a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169263de8f50a192612501928a92906004016130da565b60206040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123329190612dae565b60008061255d83612652565b90505b845151602086015110156126465760a085015160c08601516000916125939161258a9082906133dc565b8851919061237c565b90508161ffff16816000015161ffff16146125ae5750612638565b846040015160ff16816020015160ff16146125c95750612638565b6040805180820190915260608152600060208201526125f6855189516125ef919061319c565b8290612896565b5061260181896128fb565b5061260c81866128fb565b50612624826040015182600001518460600151612922565b156126355760019350505050610c1d565b50505b61264185610e7b565b612560565b50600095945050505050565b6000612000825111156126c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f6e67206b657973206e6f74207065726d69747465640000000000000000006044820152606401611572565b60008060005b8451601f0181101561273657600081602087010151905085518260200111156126fc5785518290036008026101000390811c901b5b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff600882901c811694909401931691909101906020016126c7565b506010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff160191506010817fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1601905080600883901b0191506020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff160191506040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c8277ffffffffffffffff0000000000000000ffffffffffffffff16019150608082901c826fffffffffffffffffffffffffffffffff16019150601082901c61ffff16820191508192505050919050565b6040805180820190915260608152600060208201526128b6602083613496565b156128de576128c6602083613496565b6128d19060206133dc565b6128db908361319c565b91505b506020828101829052604080518085526000815290920101905290565b604080518082019091526060815260006020820152610a4483846000015151848551612a10565b60ff831660009081526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16612957575060006108f7565b60ff84166000908152600460208190526040918290205491517ff7e83aee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f7e83aee916129c09187918791016130b5565b60206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190612dae565b6040805180820190915260608152600060208201528251821115612a3357600080fd5b6020850151612a42838661319c565b1115612a7557612a7585612a6587602001518786612a60919061319c565b612afa565b612a709060026132e5565b612b11565b600080865180518760208301019350808887011115612a945787860182525b505050602084015b60208410612ad45780518252612ab360208361319c565b9150612ac060208261319c565b9050612acd6020856133dc565b9350612a9c565b51815160001960208690036101000a019081169019919091161790525083949350505050565b600081831115612b0b575081610a47565b50919050565b8151612b1d8383612896565b5061084983826128fb565b60008083601f840112612b39578182fd5b50813567ffffffffffffffff811115612b50578182fd5b602083019150836020828501011115612b6857600080fd5b9250929050565b600082601f830112612b7f578081fd5b813567ffffffffffffffff811115612b9957612b99613508565b612bca60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161314d565b818152846020838601011115612bde578283fd5b816020850160208301379081016020019190915292915050565b600060408284031215612c09578081fd5b6040516040810167ffffffffffffffff8282108183111715612c2d57612c2d613508565b816040528293508435915080821115612c4557600080fd5b612c5186838701612b6f565b83526020850135915080821115612c6757600080fd5b50612c7485828601612b6f565b6020830152505092915050565b803561ffff81168114612c9357600080fd5b919050565b803560ff81168114612c9357600080fd5b600060208284031215612cba578081fd5b8135610a4481613537565b600080600060408486031215612cd9578182fd5b833567ffffffffffffffff80821115612cf0578384fd5b818601915086601f830112612d03578384fd5b8135602082821115612d1757612d17613508565b8160051b612d2682820161314d565b8381528281019086840183880185018d1015612d4057898afd5b8993505b85841015612d7d57803587811115612d5a578a8bfd5b612d688e87838c0101612bf8565b84525060019390930192918401918401612d44565b509850505087013592505080821115612d94578384fd5b50612da186828701612b28565b9497909650939450505050565b600060208284031215612dbf578081fd5b81518015158114610a44578182fd5b600060208284031215612ddf578081fd5b5051919050565b60008060408385031215612df8578182fd5b823567ffffffffffffffff80821115612e0f578384fd5b612e1b86838701612bf8565b93506020850135915080821115612e30578283fd5b50612e3d85828601612b6f565b9150509250929050565b600080600060408486031215612e5b578283fd5b612e6484612c81565b9250602084013567ffffffffffffffff811115612e7f578283fd5b612da186828701612b28565b60008060008060808587031215612ea0578081fd5b612ea985612c81565b9350602085013567ffffffffffffffff80821115612ec5578283fd5b612ed188838901612b6f565b94506040870135915080821115612ee6578283fd5b612ef288838901612bf8565b93506060870135915080821115612f07578283fd5b50612f1487828801612b6f565b91505092959194509250565b600080600080600060a08688031215612f37578081fd5b612f4086612c81565b9450602086013567ffffffffffffffff80821115612f5c578283fd5b612f6889838a01612b6f565b95506040880135915080821115612f7d578283fd5b612f8989838a01612bf8565b94506060880135915080821115612f9e578283fd5b612faa89838a01612bf8565b93506080880135915080821115612fbf578283fd5b50612fcc88828901612b6f565b9150509295509295909350565b600060208284031215612fea578081fd5b610a4482612c98565b60008060408385031215613005578182fd5b61300e83612c98565b9150602083013561301e81613537565b809150509250929050565b60008151808452815b8181101561304e57602081850181015186830182015201613032565b8181111561305f5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b602081526000610a446020830184613029565b6040815260006130c86040830185613029565b8281036020840152610d388185613029565b6060815260006130ed6060830186613029565b82810360208401526130ff8186613029565b905082810360408401526123328185613029565b6060815260006131266060830186613029565b82810360208401526131388186613029565b91505061ffff83166040830152949350505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561319457613194613508565b604052919050565b600082198211156131af576131af6134aa565b500190565b600060ff821660ff84168060ff038211156131d1576131d16134aa565b019392505050565b600061ffff808416806131ee576131ee6134d9565b92169190910492915050565b600181815b8085111561323557816000190482111561321b5761321b6134aa565b8085161561322857918102915b93841c93908002906131ff565b509250929050565b6000610a44838360008261325357506001610a47565b8161326057506000610a47565b816001811461327657600281146132805761329c565b6001915050610a47565b60ff841115613291576132916134aa565b50506001821b610a47565b5060208310610133831016604e8410600b84101617156132bf575081810a610a47565b6132c983836131fa565b80600019048211156132dd576132dd6134aa565b029392505050565b60008160001904831182151516156132ff576132ff6134aa565b500290565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561333e5761333e6134aa565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613372576133726134aa565b50500390565b60008160030b8360030b828112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000018312811516156133ba576133ba6134aa565b81637fffffff0183138116156133d2576133d26134aa565b5090039392505050565b6000828210156133ee576133ee6134aa565b500390565b600060ff821660ff84168082101561340d5761340d6134aa565b90039392505050565b600081613425576134256134aa565b506000190190565b600181811c9082168061344157607f821691505b60208210811415612b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060001982141561348f5761348f6134aa565b5060010190565b6000826134a5576134a56134d9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461355957600080fd5b5056fe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa264697066735822122021dd1abc05c3cbc1d56c91af7ce4f1050efc7b81ed60cdbe68e35a4dc1df0bb364736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806373cc48a61161008c57806398d35f201161006657806398d35f201461025b578063bd7ed31a14610263578063c327deef14610299578063d7b82ebe146102cf57600080fd5b806373cc48a6146101cd5780638438dc04146102285780638da5cb5b1461023b57600080fd5b806313af4035116100c857806313af40351461017457806328e7677d146101875780632c095cbb1461019a578063435cc162146101ad57600080fd5b8063020ed8d3146100ef578063087991bc146101045780630b1a249514610161575b600080fd5b6101026100fd366004612ff3565b6102e2565b005b610117610112366004612e47565b610396565b6040805163ffffffff94851681529390921660208401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016908201526060015b60405180910390f35b61010261016f366004612f20565b61040b565b610102610182366004612ca9565b6105fa565b610102610195366004612ff3565b610665565b6101026101a8366004612e8b565b610711565b6101c06101bb366004612cc5565b61084f565b60405161015891906130a2565b6102036101db366004612fd9565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610158565b610102610236366004612ff3565b6108fe565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101c06109aa565b610203610271366004612fd9565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102036102a7366004612fd9565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c06102dd366004612de6565b610a38565b60015473ffffffffffffffffffffffffffffffffffffffff16331461030657600080fd5b60ff821660008181526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b6000806000806002600087876040516103b0929190613092565b60408051918290039091208252602080830193909352908101600090812061ffff8b16825290925290205463ffffffff8082169550640100000000820416935068010000000000000000900460601b91505093509350939050565b8351602080860191909120600090815260028252604080822061ffff891683529092529081205463ffffffff16906104438584610a4d565b9050610450818784610b3e565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e081018290526101008101829052610120810191909152845151156104c2576104b58585610a4d565b90506104c2818885610b3e565b60006104cd83610b84565b602081015190915060fe16156104e257600080fd5b6104ed816027610be3565b1580156105125750610500816002610be3565b15806105125750610512816006610be3565b61051b57600080fd5b61052c898985610120015184610bf5565b156105805787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080547fffffffff000000000000000000000000000000000000000000000000000000001690556105ef565b61059f888461012001518385610120015161059a87610b84565b610c25565b156100ea5787516020808a0191909120600090815260028252604080822061ffff8d1683529092522080547fffffffff000000000000000000000000000000000000000000000000000000001690555b505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461061e57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461068957600080fd5b60ff821660008181526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7910161038a565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915261076e8383610a4d565b805190915061ffff16602f1461078357600080fd5b60a08101518451602080870191909120600090815260028252604080822061ffff8a16835290925220546107bd919063ffffffff16610d41565b6107c657600080fd5b60006107d182610d5a565b905080515160208201511015610843576107f2818361012001518789610db8565b50508251602080850191909120600090815260028252604080822061ffff881683529092522080547fffffffff00000000000000000000000000000000000000000000000000000000169055610849565b50600080fd5b50505050565b6060600083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509394505050505b85518110156108f3576108df8682815181106108d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183610f63565b9150806108eb8161347b565b91505061088c565b5090505b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461092257600080fd5b60ff821660008181526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527fc7eec866a7a1386188cc3ca20ffea75b71bd3e90a60b6791b1d3f0971145118d910161038a565b600080546109b79061342d565b80601f01602080910402602001604051908101604052809291908181526020018280546109e39061342d565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b505050505081565b6060610a448383610f63565b90505b92915050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e0810182905261010081018290526101208101919091528251610aab9061118b565b9050610abb8160e00151836112cd565b610ac457600080fd5b6000610ad4828360000151611352565b604083015190915060ff16610aea8260006113fd565b14610af457600080fd5b61012082018190526080820151610b0b9042610d41565b610b1457600080fd5b610b22428360a00151610d41565b610b2b57600080fd5b610b378183868661147e565b5092915050565b610b4c8360a0015182610d41565b610b5557600080fd5b825161ffff16603214610b6757600080fd5b610b7683610120015183611582565b610b7f57600080fd5b505050565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a082015290610bbe83610d5a565b60a081015160c08201519192506108f791610bda9082906133dc565b835191906115f0565b6000610a448360a00151600084611737565b6000610c0282848661184d565b15610c1957610c118286610be3565b159050610c1d565b5060005b949350505050565b602081015160009060fe1615610c3a57600080fd5b6000610c4586611874565b90506000610c5285611874565b9050600080610c618a82611890565b610c6c9060016131b4565b60ff1690505b8951811015610d2f5783610c9e89610c9984858f51610c9191906133dc565b8f91906118db565b611984565b1415610d03576000610cbb87610c9985868f51610c9191906133dc565b90508660800151841015610ce7578381118015610cdb5750866080015181105b95505050505050610d38565b83811180610cdb57508660800151811095505050505050610d38565b905080610d108a82611890565b610d1b9060016131b4565b610d289060ff168261319c565b9050610c72565b50600093505050505b95945050505050565b600080610d4e8385613378565b60030b12159392505050565b610da86040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b610a478261010001516000611a45565b60a08401518451600090610dcc9083611aa6565b905060008660a001518760c00151610de491906133dc565b9050818111610df257600080fd5b6000610dfe8688611b24565b905080610e2a57610e1b610e12848661319c565b89519087611737565b15610e2557600080fd5b610e71565b8751600090610e3a9086866118db565b905060008213610e4957600080fd5b6000610e558983611b24565b12156105ef576000610e678883611b24565b126105ef57600080fd5b5050505050505050565b60c08101516020820181905281515111610e925750565b6000610ea682600001518360200151611aa6565b8260200151610eb5919061319c565b8251909150610ec49082611c77565b61ffff166040830152610ed860028261319c565b8251909150610ee79082611c77565b61ffff166060830152610efb60028261319c565b8251909150610f0a9082611c9f565b63ffffffff166080830152610f2060048261319c565b8251909150600090610f329083611c77565b61ffff169050610f4360028361319c565b60a084018190529150610f56818361319c565b60c0909301929092525050565b604080516101408101825260008082526020820181905291810182905260608181018390526080820183905260a0820183905260c082019290925260e0810182905261010081018290526101208101829052610fbf8484610a4d565b61012081015180516020918201206000908152600282526040808220845161ffff1683529092522080549192509068010000000000000000900460601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016156110435760a0820151815461103a919063ffffffff16610d41565b61104357600080fd5b604080516060808201835260a085015163ffffffff9081168352608086015181166020808501918252610100880180518051908301207fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168688019081526101208a0180518051908501206000908152600285528981208c5161ffff16825290945292889020965187549451915190961c68010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff918616640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909516969095169590951792909217939093169190911790925551905191517f55ced933cdd5a34dd03eb5d4bef19ec6ebb251dcd7a988eee0c1b9a13baaa88b9261117692916130b5565b60405180910390a15061010001519392505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018190526101008201819052610120820152906111e6908390611c77565b61ffff1681526111f7826002611890565b60ff16602082015261120a826003611890565b60ff16604082015261121d826004611c9f565b63ffffffff9081166060830152611239908390600890611c9f16565b63ffffffff9081166080830152611255908390600c90611c9f16565b63ffffffff90811660a0830152611271908390601090611c7716565b61ffff1660c0820152611285826012611cc9565b60e08201819052516112c29061129c90601261319c565b8260e0015151601285516112b091906133dc565b6112ba91906133dc565b8491906118db565b610100820152919050565b6000806112e46112dd8483611aa6565b8490611c77565b8351602080860191909120865187830120600090815260028352604080822061ffff9095168252939092529190205468010000000000000000900460601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811691161491505092915050565b6060600061135f84610d5a565b90505b80515160208201511015610b3757606081015161ffff1660011461138557600080fd5b815161139b5761139481611ce4565b91506113d7565b602081015181516113ab91611aa6565b8251146113b757600080fd5b8051602082015183516113ce928592600092611d05565b6113d757600080fd5b8261ffff16816040015161ffff16146113ef57600080fd5b6113f881610e7b565b611362565b6000805b83518310611438577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006114448585611890565b60ff16905061145481600161319c565b61145e908561319c565b93508061146b5750610a44565b61147660018361319c565b915050611401565b83518360e0015151111561149157600080fd5b6114b66000858560e001515187516114a991906133dc565b60e0870151929190611d28565b6114bf57600080fd5b60006114cb8282611a45565b604081015190915061ffff16602b14156114f8576114ea848483611d5d565b6114f357600080fd5b61157b565b604081015161ffff1660301415611514576114ea848483611df6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f2076616c69642070726f6f6620666f756e6400000000000000000000000060448201526064015b60405180910390fd5b5050505050565b60008061158f8482611890565b61159a9060016131b4565b60ff16905060005b8351811015610c19576115b784828785611d28565b156115c757600192505050610a47565b6115d18482611890565b6115dc9060016131b4565b6115e99060ff168261319c565b90506115a2565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820183905260a08201529061162b838561319c565b905061164261163b60008661319c565b8690611890565b60ff16825261165561163b60018661319c565b60ff16602083015261167261166b60028661319c565b8690611c77565b61ffff166040830152600061169261168b60048761319c565b8790611890565b905061169f60058661319c565b94506116af868660ff84166118db565b60608401526116c160ff82168661319c565b945060006116cf8787611890565b905060208160ff1611156116e257600080fd5b6116ed60018761319c565b95506116fd878760ff8416611e9e565b608085015261170f60ff82168761319c565b95506117278661171f81866133dc565b8991906118db565b60a0850152509195945050505050565b600060ff600883811c82169183916117509186166131d9565b905060006117626007808716906133f3565b600160ff919091161b9050855b875181101561183f5760006117848983611890565b9050600061179d61179684600161319c565b8b90611890565b90508160ff168660ff1610156117bc57600096505050505050506108f7565b8160ff168660ff16141561181e578460ff168160ff16116117e657600096505050505050506108f7565b836118096117f760ff88168661319c565b61180290600261319c565b8c90611890565b1660ff166000141596505050505050506108f7565b6118298160026131b4565b6118369060ff168461319c565b9250505061176f565b506000979650505050505050565b60008061185a8584611984565b9050600061186785611874565b9190911495945050505050565b6000610a4760016118858484611890565b84919060ff16611edf565b60008282815181106118cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b016020015160f81c905092915050565b82516060906118ea838561319c565b11156118f557600080fd5b60008267ffffffffffffffff811115611937577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611961576020820181803683370190505b509050602080820190868601016119798282876121af565b509095945050505050565b815160ff166000908152600560205260408082205460608501518286015192517f68f9dab200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216926368f9dab2926119f592918791600401613113565b60206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612dce565b611a936040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c08101829052610a4781610e7b565b6000815b83518110611ae1577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000611aed8583611890565b60ff169050611afd81600161319c565b611b07908361319c565b915080611b145750611b1a565b50611aaa565b610c1d83826133dc565b6000611b308383612205565b15611b3d57506000610a47565b6000806000806000611b508860006113fd565b90506000611b5f8860006113fd565b90505b80821115611b8b57859350611b778987612223565b955081611b8381613416565b925050611b62565b81811115611bb457849250611ba08886612223565b945080611bac81613416565b915050611b8b565b600082118015611bcd5750611bcb89878a88611d28565b155b15611c0257859350611bdf8987612223565b9550849250611bee8886612223565b9450611bfb6001836133dc565b9150611bb4565b85611c17576000199650505050505050610a47565b84611c2b5760019650505050505050610a47565b611c6a611c3985600161319c565b611c438b87611890565b60ff168a611c5287600161319c565b611c5c8d89611890565b8e949392919060ff16612247565b9998505050505050505050565b8151600090611c8783600261319c565b1115611c9257600080fd5b50016002015161ffff1690565b8151600090611caf83600461319c565b1115611cba57600080fd5b50016004015163ffffffff1690565b60606000611cd78484611aa6565b9050610c1d8484836118db565b60208101518151606091610a4791611cfc9082611aa6565b845191906118db565b6000611d1284848461233c565b611d1d87878561233c565b149695505050505050565b6000611d418383848651611d3c91906133dc565b61233c565b611d538686878951611d3c91906133dc565b1495945050505050565b600080611d6985610d5a565b90505b80515160208201511015610c1957604081015161ffff16603014611d8f57600080fd5b6000611d9a82612360565b90506000611db5600083518461237c9092919063ffffffff16565b9050611dc38183898961241a565b15611de657611ddc611dd484611ce4565b868385612551565b93505050506108f7565b5050611df181610e7b565b611d6c565b6000611e0f8460e00151611e0984611ce4565b90612205565b611e1857600080fd5b81515160208301511015611e9457611e378460e00151611e0984611ce4565b611e4057600080fd5b6000611e4b83612360565b90506000611e66600083518461237c9092919063ffffffff16565b9050611e748183888861241a565b15611e84576001925050506108f7565b5050611e8f82610e7b565b611e18565b5060009392505050565b60006020821115611eae57600080fd5b8351611eba838561319c565b1115611ec557600080fd5b506020919092018101519190036101000a60001901191690565b60006034821115611eef57600080fd5b600080805b8481101561209257600087611f09838961319c565b81518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f30000000000000000000000000000000000000000000000000000000000000008110801590611fdb57507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b611fe457600080fd5b60405180608001604052806047815260200161355d6047913961200c603060f884901c6133dc565b81518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0160209081015160f81c935083111561205b57600080fd5b6120666001876133dc565b8214156120735750612092565b5060059290921b60ff821617918061208a8161347b565b915050611ef4565b5060006120a08560056132e5565b90506120ad600886613496565b6120c2578160ff16600584901b179250612195565b6120cd600886613496565b600214156120fc5760028260ff16901c60ff16600384901b1792506002816120f591906133dc565b9050612195565b612107600886613496565b6004141561212f5760048260ff16901c60ff16600184901b1792506004816120f591906133dc565b61213a600886613496565b600514156121625760018260ff16901c60ff16600484901b1792506001816120f591906133dc565b61216d600886613496565b600714156100ea5760038260ff16901c60ff16600284901b1792506003816120f591906133dc565b6121a1816101006133dc565b9290921b9695505050505050565b602081106121e757815183526121c660208461319c565b92506121d360208361319c565b91506121e06020826133dc565b90506121af565b905182516020929092036101000a6000190180199091169116179052565b600081518351148015610a445750610a448360008460008751611d05565b600061222f8383611890565b60ff1661223d83600161319c565b610a44919061319c565b600084808310156122555750815b60208789018101908587010160005b8381101561232157825182518082146122f1576000602087111561228b57506000196122c7565b6001846122998960206133dc565b6122a3919061319c565b6122ae9060086132e5565b6122b990600261323d565b6122c391906133dc565b1990505b60006122d7838316858416613304565b905080156122ee5797506123329650505050505050565b50505b6122fc60208661319c565b945061230960208561319c565b9350505060208161231a919061319c565b9050612264565b5061232c8589613304565b93505050505b9695505050505050565b825160009061234b838561319c565b111561235657600080fd5b5091016020012090565b60a081015160c0820151606091610a4791611cfc9082906133dc565b60408051608081018252600080825260208201819052918101919091526060808201526123b46123ad60008561319c565b8590611c77565b61ffff1681526123cf6123c860028561319c565b8590611890565b60ff1660208201526123e56123c860038561319c565b60ff16604082015261240e6123fb60048561319c565b6124066004856133dc565b8691906118db565b60608201529392505050565b6000846020015160ff1660031461243357506000610c1d565b826020015160ff16856040015160ff161461245057506000610c1d565b600061245b85612652565b90508360c0015161ffff168161ffff161461247a576000915050610c1d565b85516101001661248e576000915050610c1d565b60408087015160ff16600090815260036020908152908290205485519186015192517fde8f50a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169263de8f50a192612501928a92906004016130da565b60206040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123329190612dae565b60008061255d83612652565b90505b845151602086015110156126465760a085015160c08601516000916125939161258a9082906133dc565b8851919061237c565b90508161ffff16816000015161ffff16146125ae5750612638565b846040015160ff16816020015160ff16146125c95750612638565b6040805180820190915260608152600060208201526125f6855189516125ef919061319c565b8290612896565b5061260181896128fb565b5061260c81866128fb565b50612624826040015182600001518460600151612922565b156126355760019350505050610c1d565b50505b61264185610e7b565b612560565b50600095945050505050565b6000612000825111156126c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f6e67206b657973206e6f74207065726d69747465640000000000000000006044820152606401611572565b60008060005b8451601f0181101561273657600081602087010151905085518260200111156126fc5785518290036008026101000390811c901b5b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff600882901c811694909401931691909101906020016126c7565b506010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff160191506010817fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1601905080600883901b0191506020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff160191506040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c8277ffffffffffffffff0000000000000000ffffffffffffffff16019150608082901c826fffffffffffffffffffffffffffffffff16019150601082901c61ffff16820191508192505050919050565b6040805180820190915260608152600060208201526128b6602083613496565b156128de576128c6602083613496565b6128d19060206133dc565b6128db908361319c565b91505b506020828101829052604080518085526000815290920101905290565b604080518082019091526060815260006020820152610a4483846000015151848551612a10565b60ff831660009081526004602052604081205473ffffffffffffffffffffffffffffffffffffffff16612957575060006108f7565b60ff84166000908152600460208190526040918290205491517ff7e83aee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163f7e83aee916129c09187918791016130b5565b60206040518083038186803b1580156129d857600080fd5b505afa1580156129ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190612dae565b6040805180820190915260608152600060208201528251821115612a3357600080fd5b6020850151612a42838661319c565b1115612a7557612a7585612a6587602001518786612a60919061319c565b612afa565b612a709060026132e5565b612b11565b600080865180518760208301019350808887011115612a945787860182525b505050602084015b60208410612ad45780518252612ab360208361319c565b9150612ac060208261319c565b9050612acd6020856133dc565b9350612a9c565b51815160001960208690036101000a019081169019919091161790525083949350505050565b600081831115612b0b575081610a47565b50919050565b8151612b1d8383612896565b5061084983826128fb565b60008083601f840112612b39578182fd5b50813567ffffffffffffffff811115612b50578182fd5b602083019150836020828501011115612b6857600080fd5b9250929050565b600082601f830112612b7f578081fd5b813567ffffffffffffffff811115612b9957612b99613508565b612bca60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161314d565b818152846020838601011115612bde578283fd5b816020850160208301379081016020019190915292915050565b600060408284031215612c09578081fd5b6040516040810167ffffffffffffffff8282108183111715612c2d57612c2d613508565b816040528293508435915080821115612c4557600080fd5b612c5186838701612b6f565b83526020850135915080821115612c6757600080fd5b50612c7485828601612b6f565b6020830152505092915050565b803561ffff81168114612c9357600080fd5b919050565b803560ff81168114612c9357600080fd5b600060208284031215612cba578081fd5b8135610a4481613537565b600080600060408486031215612cd9578182fd5b833567ffffffffffffffff80821115612cf0578384fd5b818601915086601f830112612d03578384fd5b8135602082821115612d1757612d17613508565b8160051b612d2682820161314d565b8381528281019086840183880185018d1015612d4057898afd5b8993505b85841015612d7d57803587811115612d5a578a8bfd5b612d688e87838c0101612bf8565b84525060019390930192918401918401612d44565b509850505087013592505080821115612d94578384fd5b50612da186828701612b28565b9497909650939450505050565b600060208284031215612dbf578081fd5b81518015158114610a44578182fd5b600060208284031215612ddf578081fd5b5051919050565b60008060408385031215612df8578182fd5b823567ffffffffffffffff80821115612e0f578384fd5b612e1b86838701612bf8565b93506020850135915080821115612e30578283fd5b50612e3d85828601612b6f565b9150509250929050565b600080600060408486031215612e5b578283fd5b612e6484612c81565b9250602084013567ffffffffffffffff811115612e7f578283fd5b612da186828701612b28565b60008060008060808587031215612ea0578081fd5b612ea985612c81565b9350602085013567ffffffffffffffff80821115612ec5578283fd5b612ed188838901612b6f565b94506040870135915080821115612ee6578283fd5b612ef288838901612bf8565b93506060870135915080821115612f07578283fd5b50612f1487828801612b6f565b91505092959194509250565b600080600080600060a08688031215612f37578081fd5b612f4086612c81565b9450602086013567ffffffffffffffff80821115612f5c578283fd5b612f6889838a01612b6f565b95506040880135915080821115612f7d578283fd5b612f8989838a01612bf8565b94506060880135915080821115612f9e578283fd5b612faa89838a01612bf8565b93506080880135915080821115612fbf578283fd5b50612fcc88828901612b6f565b9150509295509295909350565b600060208284031215612fea578081fd5b610a4482612c98565b60008060408385031215613005578182fd5b61300e83612c98565b9150602083013561301e81613537565b809150509250929050565b60008151808452815b8181101561304e57602081850181015186830182015201613032565b8181111561305f5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b602081526000610a446020830184613029565b6040815260006130c86040830185613029565b8281036020840152610d388185613029565b6060815260006130ed6060830186613029565b82810360208401526130ff8186613029565b905082810360408401526123328185613029565b6060815260006131266060830186613029565b82810360208401526131388186613029565b91505061ffff83166040830152949350505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561319457613194613508565b604052919050565b600082198211156131af576131af6134aa565b500190565b600060ff821660ff84168060ff038211156131d1576131d16134aa565b019392505050565b600061ffff808416806131ee576131ee6134d9565b92169190910492915050565b600181815b8085111561323557816000190482111561321b5761321b6134aa565b8085161561322857918102915b93841c93908002906131ff565b509250929050565b6000610a44838360008261325357506001610a47565b8161326057506000610a47565b816001811461327657600281146132805761329c565b6001915050610a47565b60ff841115613291576132916134aa565b50506001821b610a47565b5060208310610133831016604e8410600b84101617156132bf575081810a610a47565b6132c983836131fa565b80600019048211156132dd576132dd6134aa565b029392505050565b60008160001904831182151516156132ff576132ff6134aa565b500290565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561333e5761333e6134aa565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613372576133726134aa565b50500390565b60008160030b8360030b828112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000018312811516156133ba576133ba6134aa565b81637fffffff0183138116156133d2576133d26134aa565b5090039392505050565b6000828210156133ee576133ee6134aa565b500390565b600060ff821660ff84168082101561340d5761340d6134aa565b90039392505050565b600081613425576134256134aa565b506000190190565b600181811c9082168061344157607f821691505b60208210811415612b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060001982141561348f5761348f6134aa565b5060010190565b6000826134a5576134a56134d9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461355957600080fd5b5056fe00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fa264697066735822122021dd1abc05c3cbc1d56c91af7ce4f1050efc7b81ed60cdbe68e35a4dc1df0bb364736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
