{"matchId":"54580673","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-10-03T22:49:14Z","creationBytecode":{"onchainBytecode":"0x60a060405260018055600160025534801562000019575f80fd5b5060405162002782380380620027828339810160408190526200003c9162000090565b60015f556001600160a01b03811615806200005f57506001600160a01b0381163b155b156200007e57604051630a790f9560e41b815260040160405180910390fd5b6001600160a01b0316608052620000bf565b5f60208284031215620000a1575f80fd5b81516001600160a01b0381168114620000b8575f80fd5b9392505050565b608051612687620000fb5f395f81816102c401528181610c7801528181610f5b015281816118e40152818161196401526119ad01526126875ff3fe608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b41892","recompiledBytecode":"0x60a060405260018055600160025534801562000019575f80fd5b5060405162002782380380620027828339810160408190526200003c9162000090565b60015f556001600160a01b03811615806200005f57506001600160a01b0381163b155b156200007e57604051630a790f9560e41b815260040160405180910390fd5b6001600160a01b0316608052620000bf565b5f60208284031215620000a1575f80fd5b81516001600160a01b0381168114620000b8575f80fd5b9392505050565b608051612687620000fb5f395f81816102c401528181610c7801528181610f5b015281816118e40152818161196401526119ad01526126875ff3fe608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","sourceMap":"415:17722:7:-:0;;;4696:1;4669:28;;4737:1;4703:35;;5212:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1857:1:5;2061:7;:21;-1:-1:-1;;;;;5263:39:7;;;;:85;;-1:-1:-1;;;;;;5306:37:7;;;:42;5263:85;5259:147;;;5371:24;;-1:-1:-1;;;5371:24:7;;;;;;;;;;;5259:147;-1:-1:-1;;;;;5415:34:7;;;415:17722;;14:304:8;98:6;151:2;139:9;130:7;126:23;122:32;119:52;;;167:1;164;157:12;119:52;193:16;;-1:-1:-1;;;;;238:31:8;;228:42;;218:70;;284:1;281;274:12;218:70;307:5;14:304;-1:-1:-1;;;14:304:8:o;:::-;415:17722:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","offset":10061}},"transformations":[{"type":"insert","offset":10114,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b41892"}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b4189281565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b41892168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b41892163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b418926001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b418921633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b4189216906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","recompiledBytecode":"0x608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","sourceMap":"415:17722:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;598:65;;-1:-1:-1;;;;;598:65:7;;;;;160:25:8;;;148:2;133:18;598:65:7;;;;;;;;16553:268;;;;;;:::i;:::-;;:::i;9753:2238::-;;;;;;:::i;:::-;;:::i;:::-;;15376:135;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4703:35::-;;;;;;8887:601;;;;;;:::i;:::-;;:::i;13167:898::-;;;;;;:::i;:::-;;:::i;15795:139::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14625:745::-;;;;;;:::i;:::-;;:::i;14071:548::-;;;;;;:::i;:::-;;:::i;4913:92::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5526:14:8;;5519:22;5501:41;;5489:2;5474:18;4913:92:7;5361:187:8;4624:39:7;;;;;;;;-1:-1:-1;;;;;5731:32:8;;;5713:51;;5701:2;5686:18;4624:39:7;5553:217:8;5111:94:7;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;669:60;;723:6;669:60;;9494:253;;;;;;:::i;:::-;;:::i;5462:1112::-;;;;;;:::i;:::-;;:::i;6580:1567::-;;;;;;:::i;:::-;;:::i;548:44::-;;590:2;548:44;;15517:132;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12076:1085::-;;;;;;:::i;:::-;;:::i;4669:28::-;;;;;;15940:266;;;;;;:::i;:::-;;:::i;:::-;;;;;;8086:4:8;8128:3;8117:9;8113:19;8105:27;;8165:6;8159:13;8148:9;8141:32;8229:4;8221:6;8217:17;8211:24;8204:4;8193:9;8189:20;8182:54;8292:4;8284:6;8280:17;8274:24;8267:4;8256:9;8252:20;8245:54;8355:4;8347:6;8343:17;8337:24;8330:4;8319:9;8315:20;8308:54;8418:4;8410:6;8406:17;8400:24;8393:4;8382:9;8378:20;8371:54;8481:4;8473:6;8469:17;8463:24;8456:4;8445:9;8441:20;8434:54;7944:550;;;;;15655:134:7;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8153:728::-;;;;;;:::i;:::-;;:::i;498:44::-;;541:1;498:44;;4744:28;;;;;;16212:335;;;;;;:::i;:::-;;:::i;16553:268::-;16615:7;16634:15;16652:14;16660:5;16652:7;:14::i;:::-;16634:32;;16680:3;:15;;;16699:1;16680:20;16676:34;;-1:-1:-1;16709:1:7;;16553:268;-1:-1:-1;;16553:268:7:o;16676:34::-;16799:15;;;;16747:17;;;;723:6;;16729:35;;16799:15;16729:35;:::i;:::-;16728:67;;;;:::i;:::-;16727:87;;;;:::i;:::-;16720:94;16553:268;-1:-1:-1;;;16553:268:7:o;9753:2238::-;9805:15;9823:14;9831:5;9823:7;:14::i;:::-;9805:32;;9847:27;9863:5;9870:3;9847:15;:27::i;:::-;9884:40;9898:5;9905:3;9910:13;9884;:40::i;:::-;9934:34;9957:5;9964:3;9934:22;:34::i;:::-;10005:17;;;:24;9979:23;10043:20;;;10039:53;;10072:20;;-1:-1:-1;;;10072:20:7;;;;;160:25:8;;;133:18;;10072:20:7;;;;;;;;10039:53;10103:19;10132:29;10176:9;10171:648;10191:15;10187:1;:19;10171:648;;;10227:20;10250:3;:17;;10268:1;10250:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;10316:26;;;:12;:26;;;;;;;10250:20;;-1:-1:-1;10381:26:7;10360:17;;;;;;:47;;;;;;;;:::i;:::-;;10356:61;;10409:8;;;;10356:61;10456:25;10435:17;;;;;;:46;;;;;;;;:::i;:::-;;10431:126;;10508:34;;-1:-1:-1;;;10508:34:7;;;;;160:25:8;;;133:18;;10508:34:7;14:177:8;10431:126:7;10570:23;;;:::i;:::-;;;10622:10;:17;;;10607:32;;;;;:::i;:::-;10705:17;;;;10653;;;;:10;:17;;;;;;;;10671:16;;;;-1:-1:-1;;;;;10671:16:7;10653:35;;;;;;;:69;;10607:32;;-1:-1:-1;10705:17:7;;10653:69;;10705:17;;10653:69;:::i;:::-;;;;-1:-1:-1;;10791:17:7;;;;10736;;;;:10;:17;;;;;;;;10754:16;;;;-1:-1:-1;;;;;10754:16:7;10736:35;;;;;;;10754:16;10736:51;:72;;:51;;:17;:72;;10791:17;;10736:72;:::i;:::-;;;;-1:-1:-1;;;;10171:648:7;10208:3;;10171:648;;;;10832:21;10857:1;10832:26;10828:59;;10867:20;;-1:-1:-1;;;10867:20:7;;;;;160:25:8;;;133:18;;10867:20:7;14:177:8;10828:59:7;10982:16;;;:23;10898:18;;;;;11015:564;11035:16;11031:1;:20;11015:564;;;11072:25;11100:17;;;:10;:17;;;;;11118:16;;;:19;;11072:25;;11118:16;11135:1;;11118:19;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;11118:19:7;11100:38;;;;;;;;;;;;11118:19;11180:24;;;11156:21;;11100:38;;-1:-1:-1;;11152:417:7;;;11268:24;;;;11244:21;;:48;;11268:24;11244:48;:::i;:::-;11224:17;;;:68;;;11310:31;;;;:::i;:::-;;;11152:417;;;11393:21;;11366:24;;;;:48;11362:207;;;11482:21;;11455:24;;;;:48;;11482:21;11455:48;:::i;:::-;11434:18;;;:69;;;11521:33;;;;:::i;:::-;;;11362:207;-1:-1:-1;11053:3:7;;11015:564;;;;11606:11;11592:10;:25;11588:81;;11626:43;;-1:-1:-1;;;11626:43:7;;;;;10372:25:8;;;10413:18;;;10406:34;;;10345:18;;11626:43:7;10198:248:8;11588:81:7;11680:15;;;:29;;;11719:17;;;:30;;;11759:12;;;:38;;-1:-1:-1;;11759:38:7;-1:-1:-1;;;11781:15:7;-1:-1:-1;;;;;11759:38:7;;;;;11819:15;;:52;;11856:15;11819:52;;;11837:16;11819:52;11807:64;;:3;;-1:-1:-1;;;;11807:64:7;-1:-1:-1;;;11807:64:7;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;11887:41:7;;;10372:25:8;;;10428:2;10413:18;;10406:34;;;11897:5:7;;11887:41;;10345:18:8;11887:41:7;;;;;;;11942:10;11956:1;11942:15;11938:46;;11975:5;11964:20;11982:1;11964:20;;;;160:25:8;;148:2;133:18;;14:177;11964:20:7;;;;;;;;11938:46;9795:2196;;;;;;;9753:2238;:::o;15376:135::-;15430:10;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15430:10:7;15452:15;15470:14;15478:5;15470:7;:14::i;:::-;15494:10;;;;;;;;;;;-1:-1:-1;;;;;15494:10:7;;;;;;-1:-1:-1;15494:10:7;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15376:135;;;:::o;8887:601::-;8969:15;8987:14;8995:5;8987:7;:14::i;:::-;8969:32;;9011:27;9027:5;9034:3;9011:15;:27::i;:::-;9048:40;9062:5;9069:3;9074:13;9048;:40::i;:::-;9098:34;9121:5;9128:3;9098:22;:34::i;:::-;9143:29;9175:28;9190:12;9175:14;:28::i;:::-;9217:16;;9143:60;;-1:-1:-1;9217:25:7;;9213:70;;9251:32;;-1:-1:-1;;;9251:32:7;;;;;160:25:8;;;133:18;;9251:32:7;14:177:8;9213:70:7;9293:76;9318:12;9332:10;9344:24;9293;:76::i;:::-;9380:17;;;:46;;-1:-1:-1;;9380:46:7;9400:26;9380:46;;;9441:40;;9468:12;;9461:5;;9441:40;;-1:-1:-1;;9441:40:7;8959:529;;8887:601;;:::o;13167:898::-;2500:21:5;:19;:21::i;:::-;13233:15:7::1;13251:14;13259:5;13251:7;:14::i;:::-;13233:32;;13275:43;13289:5;13296:3;13301:16;13275:13;:43::i;:::-;13351:3;:17;;;13332:3;:15;;;:36;13328:134;;13416:15;::::0;;::::1;::::0;13433:17:::1;::::0;::::1;::::0;13391:60:::1;::::0;-1:-1:-1;;;13391:60:7;;;;::::1;10843:25:8::0;;;10884:18;;;10877:34;;;;10927:18;;;10920:34;10816:18;;13391:60:7::1;10641:319:8::0;13328:134:7::1;13472:28:::0;;-1:-1:-1;;;;13472:28:7::1;-1:-1:-1::0;;;13472:28:7::1;::::0;;-1:-1:-1;13510:13:7;::::1;:39:::0;;-1:-1:-1;;;;13510:39:7::1;-1:-1:-1::0;;;13533:15:7::1;-1:-1:-1::0;;;;;13510:39:7::1;;;::::0;;13576:17:::1;::::0;;::::1;::::0;13559:34;;13576:17;;;-1:-1:-1;;13559:34:7::1;::::0;13576:17;;13559:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;13631:16:7::1;::::0;::::1;:23:::0;13604:24:::1;13664:343;13684:16;13680:1;:20;13664:343;;;13721:19;13743:3;:16;;13760:1;13743:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;13793:17;;;:10:::1;:17:::0;;;;;;-1:-1:-1;;;;;13743:19:7;;::::1;13793:30:::0;;;;;;;;;;:40:::1;;::::0;13743:19;;-1:-1:-1;13793:40:7;13851:11;;;13847:25:::1;;13864:8;;;;13847:25;13886:49;-1:-1:-1::0;;;;;13886:15:7::1;:28;13915:11:::0;13928:6;13886:28:::1;:49::i;:::-;13976:11;-1:-1:-1::0;;;;;13954:42:7::1;13969:5;13954:42;13989:6;13954:42;;;;160:25:8::0;;148:2;133:18;;14:177;13954:42:7::1;;;;;;;;13707:300;;13664:343;13702:3;;13664:343;;;;14033:5;14022:36;14040:3;:17;;;14022:36;;;;160:25:8::0;;148:2;133:18;;14:177;14022:36:7::1;;;;;;;;13223:842;;2542:20:5::0;1857:1;3068:7;:21;2888:208;2542:20;13167:898:7;:::o;15795:139::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15899:28:7;15914:12;15899:14;:28::i;:::-;15892:35;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15892:35:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15892:35:7;;;;;;;;;-1:-1:-1;;;15892:35:7;;;;;;;;;;15795:139;-1:-1:-1;;15795:139:7:o;14625:745::-;2500:21:5;:19;:21::i;:::-;14693:15:7::1;14711:14;14719:5;14711:7;:14::i;:::-;14693:32;;14735:43;14749:5;14756:3;14761:16;14735:13;:43::i;:::-;14789:25;14817:17:::0;;;:10:::1;:17;::::0;;;;;;;14835:10:::1;14817:29:::0;;;;;;;14891:17:::1;::::0;::::1;::::0;14873:15:::1;::::0;::::1;::::0;14817:29;;14789:25;14873:35:::1;::::0;14891:17;14873:35:::1;:::i;:::-;14856:52;;14922:6;14932:1;14922:11:::0;14918:60:::1;;14942:36;::::0;-1:-1:-1;;;14942:36:7;;::::1;::::0;::::1;11139:25:8::0;;;14967:10:7::1;11180:18:8::0;;;11173:60;11112:18;;14942:36:7::1;10965:274:8::0;14918:60:7::1;15010:6;14989:8;:17;;;:27;;;;;;;:::i;:::-;;;;;;;;15047:6;15026:3;:17;;;:27;;;;;;;:::i;:::-;;;;;;;;15080:6;15063:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15122:15:7::1;::::0;::::1;::::0;15101:17:::1;::::0;::::1;::::0;:36;15097:152:::1;;15153:29:::0;;-1:-1:-1;;;;15153:29:7::1;-1:-1:-1::0;;;15153:29:7::1;::::0;;15220:17:::1;::::0;::::1;::::0;15201:37:::1;::::0;160:25:8;;;15213:5:7;;15201:37:::1;::::0;148:2:8;133:18;15201:37:7::1;;;;;;;15097:152;15259:48;-1:-1:-1::0;;;;;15259:15:7::1;:28;15288:10;15300:6:::0;15259:28:::1;:48::i;:::-;15322:41;::::0;160:25:8;;;15344:10:7::1;::::0;15337:5;;15322:41:::1;::::0;148:2:8;133:18;15322:41:7::1;;;;;;;14683:687;;;2542:20:5::0;1857:1;3068:7;:21;2888:208;14071:548:7;14124:15;14142:14;14150:5;14142:7;:14::i;:::-;14124:32;;14166:42;14180:5;14187:3;14192:15;14166:13;:42::i;:::-;14240:19;;-1:-1:-1;;;14240:19:7;;-1:-1:-1;;;;;14240:19:7;14222:15;:37;14218:128;;;14315:19;;14282:53;;-1:-1:-1;;;14282:53:7;;;;;11417:25:8;;;-1:-1:-1;;;14315:19:7;;;-1:-1:-1;;;;;14315:19:7;11458:18:8;;;11451:59;11390:18;;14282:53:7;11244:272:8;14218:128:7;14356:28;;-1:-1:-1;;;;14356:28:7;-1:-1:-1;;;14356:28:7;;;-1:-1:-1;14394:13:7;;:39;;-1:-1:-1;;;;;14394:39:7;-1:-1:-1;;;14417:15:7;-1:-1:-1;;;;;14394:39:7;;;;;14466:15;;;;14448:34;;;160:25:8;;;14448:34:7;14459:5;;14448:34;;;;;;148:2:8;14448:34:7;;;14497:3;:15;;;14516:1;14497:20;14493:120;;14533:29;;-1:-1:-1;;;;14533:29:7;-1:-1:-1;;;14533:29:7;;;14581:21;;-1:-1:-1;160:25:8;;14593:5:7;;14581:21;;148:2:8;133:18;14581:21:7;;;;;;;14493:120;14114:505;14071:548;:::o;9494:253::-;9547:15;9565:14;9573:5;9565:7;:14::i;:::-;9547:32;;9589:27;9605:5;9612:3;9589:15;:27::i;:::-;9626:40;9640:5;9647:3;9652:13;9626;:40::i;:::-;9676:30;;-1:-1:-1;;;;9676:30:7;-1:-1:-1;;;9676:30:7;;;9721:19;;9734:5;;9721:19;;-1:-1:-1;;9721:19:7;9537:210;9494:253;:::o;5462:1112::-;5556:13;5608:12;5660:1;5641:20;;;:59;;;541:1;5665:16;:35;5641:59;5637:138;;;5723:41;;-1:-1:-1;;;5723:41:7;;;;;160:25:8;;;133:18;;5723:41:7;14:177:8;5637:138:7;5807:15;5788;-1:-1:-1;;;;;5788:34:7;;5784:79;;5831:32;;-1:-1:-1;;;5831:32:7;;-1:-1:-1;;;;;11684:31:8;;5831:32:7;;;11666:50:8;11639:18;;5831:32:7;11521:201:8;5784:79:7;5882:9;:11;;;:9;:11;;;:::i;:::-;;;;-1:-1:-1;5903:15:7;5921:12;;;:5;:12;;;;;5943:24;;5957:10;-1:-1:-1;;;;5977:25:7;-1:-1:-1;;;;;;5977:25:7;;;;-1:-1:-1;;;5977:25:7;-1:-1:-1;;;;6012:37:7;-1:-1:-1;;;;;;;;6012:37:7;;;;;;;;;;;;;-1:-1:-1;6059:13:7;;:39;;-1:-1:-1;;6059:39:7;6082:15;6059:39;;;;;;;;;5921:12;;-1:-1:-1;6109:383:7;6129:16;6125:1;:20;6109:383;;;6166:19;6188:12;;6201:1;6188:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6166:37;-1:-1:-1;;;;;;6221:25:7;;6217:69;;6255:31;;-1:-1:-1;;;6255:31:7;;-1:-1:-1;;;;;5731:32:8;;6255:31:7;;;5713:51:8;5686:18;;6255:31:7;5553:217:8;6217:69:7;6304:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;6304:33:7;;;;;;;;;;;;6300:79;;;6346:33;;-1:-1:-1;;;6346:33:7;;-1:-1:-1;;;;;5731:32:8;;6346:33:7;;;5713:51:8;5686:18;;6346:33:7;5553:217:8;6300:79:7;6393:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;6393:33:7;;;;;;;;;;;:40;;-1:-1:-1;;6393:40:7;6429:4;6393:40;;;;;;6447:16;;;:34;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6447:34:7;;;;;;;6147:3;6109:383;;;;6525:10;-1:-1:-1;;;;;6507:60:7;6518:5;6507:60;6537:15;6554:12;;6507:60;;;;;;;;:::i;:::-;;;;;;;;5571:1003;;5462:1112;;;;;:::o;6580:1567::-;6725:20;6761:15;6779:14;6787:5;6779:7;:14::i;:::-;6761:32;;6803:27;6819:5;6826:3;6803:15;:27::i;:::-;6840:40;6854:5;6861:3;6866:13;6840;:40::i;:::-;6890:34;6913:5;6920:3;6890:22;:34::i;:::-;6939:17;;;:24;590:2;-1:-1:-1;6935:81:7;;6991:25;;-1:-1:-1;;;6991:25:7;;;;;160::8;;;133:18;;6991:25:7;14:177:8;6935:81:7;7031:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;7031:27:7;;;;;;;;;;;;7026:69;;7067:28;;-1:-1:-1;;;7067:28:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;7067:28:7;10965:274:8;7026:69:7;7110:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;7110:27:7;;;;;;;;;;;;7105:69;;7146:28;;-1:-1:-1;;;7146:28:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;7146:28:7;10965:274:8;7105:69:7;7197:5;-1:-1:-1;;;;;7188:14:7;:5;-1:-1:-1;;;;;7188:14:7;;7184:65;;7211:38;;-1:-1:-1;;;7211:38:7;;-1:-1:-1;;;;;13091:15:8;;;7211:38:7;;;13073:34:8;13143:15;;13123:18;;;13116:43;13008:18;;7211:38:7;12861:304:8;7184:65:7;7263:6;7273:1;7263:11;7259:36;;7283:12;;-1:-1:-1;;;7283:12:7;;;;;;;;;;;7259:36;-1:-1:-1;;;;;7309:30:7;;7305:65;;;7348:22;;-1:-1:-1;;;7348:22:7;;;;;160:25:8;;;133:18;;7348:22:7;14:177:8;7305:65:7;7384:13;7380:62;;7420:22;;-1:-1:-1;;;7420:22:7;;;;;;;;;;;7380:62;7456:24;;;;:17;:24;;;;;;;;:39;;;;;;;;;;;7452:121;;;7518:44;;-1:-1:-1;;;7518:44:7;;;;;10372:25:8;;;10413:18;;;10406:34;;;10345:18;;7518:44:7;10198:248:8;7452:121:7;7598:16;:18;;;:16;:18;;;:::i;:::-;;;;;7583:33;;7655:291;;;;;;;;7687:5;7655:291;;;;7713:5;-1:-1:-1;;;;;7655:291:7;;;;;7739:5;-1:-1:-1;;;;;7655:291:7;;;;;7766:6;7655:291;;;;7801:13;7655:291;;;;7836:24;7655:291;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;7892:15:7;7655:291;;;;;;;;;-1:-1:-1;7655:291:7;;;;;;;7626:26;;;:12;:26;;;;;;;:320;;;;;;;;;;;;;;-1:-1:-1;;;;;7626:320:7;;;-1:-1:-1;;;;;;7626:320:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;:320;;;;-1:-1:-1;;7626:320:7;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;7626:320:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7626:320:7;;;-1:-1:-1;;;7626:320:7;-1:-1:-1;;7626:320:7;;;;;;;-1:-1:-1;;7626:320:7;;;;;;;;;;-1:-1:-1;7956:24:7;;;:17;:24;;;;;;;;:39;;;;;;;;:46;;-1:-1:-1;;7956:46:7;-1:-1:-1;7956:46:7;;;;;;8012:17;;;:36;;;;;;;;;;;;;;;;;;;8064:76;;-1:-1:-1;;;;;13643:32:8;;;13625:51;;13692:18;;;13685:34;;;13735:18;;;13728:34;;;8064:76:7;;;8012:36;;7956:24;;8064:76;;13613:2:8;13598:18;8064:76:7;;;;;;;6751:1396;6580:1567;;;;;;;:::o;15517:132::-;15580:16;15615:14;15623:5;15615:7;:14::i;:::-;:27;;15608:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15608:34:7;;;;;;;;;;;;;;;;;;;;;;;15517:132;;;:::o;12076:1085::-;2500:21:5;:19;:21::i;:::-;12137:15:7::1;12155:14;12163:5;12155:7;:14::i;:::-;12137:32;;12179:42;12193:5;12200:3;12205:15;12179:13;:42::i;:::-;12231:34;12254:5;12261:3;12231:22;:34::i;:::-;12276:25;12304:17:::0;;;:10:::1;:17;::::0;;;;;;;12322:10:::1;12304:29:::0;;;;;;;12360:17:::1;::::0;::::1;::::0;12304:29;;12391:11;;;12387:60:::1;;12411:36;::::0;-1:-1:-1;;;12411:36:7;;::::1;::::0;::::1;11139:25:8::0;;;12436:10:7::1;11180:18:8::0;;;11173:60;11112:18;;12411:36:7::1;10965:274:8::0;12387:60:7::1;12461:15;::::0;::::1;::::0;:20;12457:65:::1;;12490:32;::::0;-1:-1:-1;;;12490:32:7;;::::1;::::0;::::1;11139:25:8::0;;;12511:10:7::1;11180:18:8::0;;;11173:60;11112:18;;12490:32:7::1;10965:274:8::0;12457:65:7::1;12551:6;12533:8;:15;;:24;;;;12586:6;12567:3;:15;;;:25;;;;;;;:::i;:::-;;;;;;;;12619:6;12602:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12660:40:7::1;::::0;-1:-1:-1;;;12660:40:7;;12694:4:::1;12660:40;::::0;::::1;5713:51:8::0;12636:21:7::1;::::0;12660:15:::1;-1:-1:-1::0;;;;;12660:25:7::1;::::0;::::1;::::0;5686:18:8;;12660:40:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12636:64:::0;-1:-1:-1;12710:67:7::1;-1:-1:-1::0;;;;;12710:15:7::1;:32;12743:10;12763:4;12770:6:::0;12710:32:::1;:67::i;:::-;12806:40;::::0;-1:-1:-1;;;12806:40:7;;12840:4:::1;12806:40;::::0;::::1;5713:51:8::0;12787:16:7::1;::::0;12849:13;;-1:-1:-1;;;;;12806:15:7::1;:25;::::0;::::1;::::0;5686:18:8;;12806:40:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;;:::i;:::-;12787:75;;12888:6;12876:8;:18;12872:73;;12903:42;::::0;-1:-1:-1;;;12903:42:7;;::::1;::::0;::::1;10372:25:8::0;;;10413:18;;;10406:34;;;10345:18;;12903:42:7::1;10198:248:8::0;12872:73:7::1;12961:36;::::0;160:25:8;;;12978:10:7::1;::::0;12971:5;;12961:36:::1;::::0;148:2:8;133:18;12961:36:7::1;;;;;;;13030:3;:17;;;13011:3;:15;;;:36:::0;13007:148:::1;;13063:28:::0;;-1:-1:-1;;;;13063:28:7::1;-1:-1:-1::0;;;13063:28:7::1;::::0;;13128:15:::1;::::0;::::1;::::0;13110:34:::1;::::0;160:25:8;;;13121:5:7;;13110:34:::1;::::0;148:2:8;133:18;13110:34:7::1;;;;;;;13007:148;12127:1034;;;;;2542:20:5::0;1857:1;3068:7;:21;2888:208;15940:266:7;16020:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16020:15:7;16047:14;16055:5;16047:7;:14::i;:::-;-1:-1:-1;16076:20:7;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;16076:33:7;;;;;;;;;;;;16071:81;;16118:34;;-1:-1:-1;;;16118:34:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;16118:34:7;10965:274:8;16071:81:7;-1:-1:-1;16169:17:7;;;;:10;:17;;;;;;;;-1:-1:-1;;;;;16169:30:7;;;;;;;;;;16162:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:266;;;;;:::o;15655:134::-;15719:16;15754:14;15762:5;15754:7;:14::i;:::-;:28;;15747:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15655:134;;;:::o;8153:728::-;8235:15;8253:14;8261:5;8253:7;:14::i;:::-;8235:32;;8277:40;8291:5;8298:3;8303:13;8277;:40::i;:::-;8327:34;8350:5;8357:3;8327:22;:34::i;:::-;8372:29;8404:28;8419:12;8404:14;:28::i;:::-;8446:16;;8372:60;;-1:-1:-1;8446:25:7;;8442:70;;8480:32;;-1:-1:-1;;;8480:32:7;;;;;160:25:8;;;133:18;;8480:32:7;14:177:8;8442:70:7;8526:16;;;;-1:-1:-1;;;;;8526:16:7;8546:10;8526:30;8522:87;;8565:44;;-1:-1:-1;;;8565:44:7;;;;;11139:25:8;;;8598:10:7;11180:18:8;;;11173:60;11112:18;;8565:44:7;10965:274:8;8522:87:7;8619:76;8644:12;8658:10;8670:24;8619;:76::i;:::-;8706:17;;;:45;;-1:-1:-1;;;;;8792:15:7;8761:47;-1:-1:-1;;;8761:47:7;-1:-1:-1;;8761:47:7;;;;8726:25;8761:47;;;8823:51;;8863:10;;8849:12;;8842:5;;8823:51;;-1:-1:-1;;8823:51:7;8225:656;;8153:728;;:::o;16212:335::-;16296:7;16315:14;16323:5;16315:7;:14::i;:::-;-1:-1:-1;16344:20:7;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;16344:33:7;;;;;;;;;;;;16339:81;;16386:34;;-1:-1:-1;;;16386:34:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;16386:34:7;10965:274:8;16339:81:7;16430:25;16458:17;;;:10;:17;;;;;;;;-1:-1:-1;;;;;16458:30:7;;;;;;;;;16525:15;;;;16505:17;;;;:35;;16525:15;16505:35;:::i;:::-;16498:42;16212:335;-1:-1:-1;;;;16212:335:7:o;16827:173::-;16881:15;16914:12;;;:5;:12;;;;;;16940:9;;-1:-1:-1;;;16940:9:7;;;;:26;;;;;;;;:::i;:::-;;16936:57;;16975:18;;-1:-1:-1;;;16975:18:7;;;;;160:25:8;;;133:18;;16975::7;14:177:8;16936:57:7;16827:173;;;:::o;17264:157::-;17348:11;;-1:-1:-1;;;;;17348:11:7;17363:10;17348:25;17344:70;;17382:32;;-1:-1:-1;;;17382:32:7;;;;;11139:25:8;;;17403:10:7;11180:18:8;;;11173:60;11112:18;;17382:32:7;10965:274:8;17427:181:7;17541:8;17528:21;;;;;;;;:::i;:::-;:9;;-1:-1:-1;;;17528:9:7;;;;:21;;;;;;;;:::i;:::-;;17524:77;;17591:9;;17558:43;;-1:-1:-1;;;17558:43:7;;;;17574:5;;17581:8;;-1:-1:-1;;;17591:9:7;;;;;17558:43;;;:::i;17524:77::-;17427:181;;;:::o;17614:219::-;17724:19;;-1:-1:-1;;;17724:19:7;;-1:-1:-1;;;;;17724:19:7;17705:15;:38;17701:126;;17796:19;;17766:50;;-1:-1:-1;;;17766:50:7;;;;;11417:25:8;;;-1:-1:-1;;;17796:19:7;;;-1:-1:-1;;;;;17796:19:7;11458:18:8;;;11451:59;11390:18;;17766:50:7;11244:272:8;17006:252:7;17074:29;17128:26;;;:12;:26;;;;;;17168:17;;;;;;:42;;;;;;;;:::i;:::-;;17164:87;;17219:32;;-1:-1:-1;;;17219:32:7;;;;;160:25:8;;;133:18;;17219:32:7;14:177:8;17839:296:7;18021:8;18000:29;;;;;;;;:::i;:::-;:17;;;;;;:29;;;;;;;;:::i;:::-;;17996:133;;18100:17;;;;18052:66;;-1:-1:-1;;;18052:66:7;;;;18076:12;;18090:8;;18100:17;;;18052:66;;;:::i;2575:307:5:-;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:5;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;1219:160:4:-;1328:43;;-1:-1:-1;;;;;14946:32:8;;;1328:43:4;;;14928:51:8;14995:18;;;14988:34;;;1301:71:4;;1321:5;;1343:14;;;;;14901:18:8;;1328:43:4;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1328:43:4;;;;;;;;;;;1301:19;:71::i;1618:188::-;1745:53;;-1:-1:-1;;;;;15291:15:8;;;1745:53:4;;;15273:34:8;15343:15;;;15323:18;;;15316:43;15375:18;;;15368:34;;;1718:81:4;;1738:5;;1760:18;;;;;15208::8;;1745:53:4;15033:375:8;1718:81:4;1618:188;;;;:::o;8370:720::-;8450:18;8478:19;8616:4;8613:1;8606:4;8600:11;8593:4;8587;8583:15;8580:1;8573:5;8566;8561:60;8673:7;8663:176;;8717:4;8711:11;8762:16;8759:1;8754:3;8739:40;8808:16;8803:3;8796:29;8663:176;-1:-1:-1;;8916:1:4;8910:8;8866:16;;-1:-1:-1;8942:15:4;;:68;;8994:11;9009:1;8994:16;;8942:68;;;-1:-1:-1;;;;;8960:26:4;;;:31;8942:68;8938:146;;;9033:40;;-1:-1:-1;;;9033:40:4;;-1:-1:-1;;;;;5731:32:8;;9033:40:4;;;5713:51:8;5686:18;;9033:40:4;5553:217:8;196:180;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:8;;196:180;-1:-1:-1;196:180:8:o;490:127::-;551:10;546:3;542:20;539:1;532:31;582:4;579:1;572:15;606:4;603:1;596:15;622:139;702:1;695:5;692:12;682:46;;708:18;;:::i;:::-;737;;622:139::o;873:465::-;926:3;964:5;958:12;991:6;986:3;979:19;1017:4;1046;1041:3;1037:14;1030:21;;1085:4;1078:5;1074:16;1108:1;1118:195;1132:6;1129:1;1126:13;1118:195;;;1197:13;;-1:-1:-1;;;;;1193:39:8;1181:52;;1253:12;;;;1288:15;;;;1229:1;1147:9;1118:195;;;-1:-1:-1;1329:3:8;;873:465;-1:-1:-1;;;;;873:465:8:o;1343:439::-;1396:3;1434:5;1428:12;1461:6;1456:3;1449:19;1487:4;1516;1511:3;1507:14;1500:21;;1555:4;1548:5;1544:16;1578:1;1588:169;1602:6;1599:1;1596:13;1588:169;;;1663:13;;1651:26;;1697:12;;;;1732:15;;;;1624:1;1617:9;1588:169;;1787:1774;1956:2;1945:9;1938:21;1968:53;2017:2;2006:9;2002:18;1993:6;1987:13;-1:-1:-1;;;;;447:31:8;435:44;;381:104;1968:53;1919:4;2068:2;2060:6;2056:15;2050:22;2081:58;2135:2;2124:9;2120:18;2106:12;2081:58;:::i;:::-;-1:-1:-1;2188:2:8;2176:15;;2170:22;-1:-1:-1;;;;;831:30:8;;2250:2;2235:18;;819:43;-1:-1:-1;2303:2:8;2291:15;;2285:22;-1:-1:-1;;;;;831:30:8;;2365:3;2350:19;;819:43;-1:-1:-1;2419:3:8;2407:16;;2401:23;-1:-1:-1;;;;;831:30:8;;2482:3;2467:19;;819:43;-1:-1:-1;2536:3:8;2524:16;;2518:23;-1:-1:-1;;;;;831:30:8;;2599:3;2584:19;;819:43;-1:-1:-1;2653:3:8;2641:16;;2635:23;-1:-1:-1;;;;;831:30:8;;2716:3;2701:19;;819:43;-1:-1:-1;2758:3:8;2746:16;;2740:23;2782:3;2801:18;;;2794:30;;;;2849:15;;2843:22;2884:3;2903:18;;;2896:30;;;;2951:15;;2945:22;2986:3;3005:18;;;2998:30;;;;3053:15;;3047:22;3088:3;3107:18;;;3100:30;;;;3167:15;;3161:22;3202:6;3228:3;3247:19;;;3240:31;;;3294:65;3354:3;3339:19;;3161:22;3294:65;:::i;:::-;3396:16;;;3390:23;3453:22;;;-1:-1:-1;;3449:36:8;3429:18;;;3422:64;3280:79;;-1:-1:-1;3503:52:8;3280:79;3390:23;3503:52;:::i;:::-;3495:60;1787:1774;-1:-1:-1;;;;;;1787:1774:8:o;3566:248::-;3634:6;3642;3695:2;3683:9;3674:7;3670:23;3666:32;3663:52;;;3711:1;3708;3701:12;3663:52;-1:-1:-1;;3734:23:8;;;3804:2;3789:18;;;3776:32;;-1:-1:-1;3566:248:8:o;3819:147::-;3907:1;3900:5;3897:12;3887:46;;3913:18;;:::i;3971:948::-;4117:4;4159:3;4148:9;4144:19;4136:27;;4196:6;4190:13;4179:9;4172:32;4251:4;4243:6;4239:17;4233:24;4293:1;4289;4284:3;4280:11;4276:19;4351:2;4337:12;4333:21;4326:4;4315:9;4311:20;4304:51;4423:2;4415:4;4407:6;4403:17;4397:24;4393:33;4386:4;4375:9;4371:20;4364:63;;;4483:4;4475:6;4471:17;4465:24;4458:4;4447:9;4443:20;4436:54;4546:4;4538:6;4534:17;4528:24;4521:4;4510:9;4506:20;4499:54;4602:4;4594:6;4590:17;4584:24;4617:70;4681:4;4670:9;4666:20;4650:14;4617:70;:::i;:::-;;4736:4;4728:6;4724:17;4718:24;-1:-1:-1;;;;;4837:2:8;4821:14;4817:23;4810:4;4799:9;4795:20;4788:53;4909:2;4901:4;4893:6;4889:17;4883:24;4879:33;4872:4;4861:9;4857:20;4850:63;;;3971:948;;;;:::o;4924:173::-;4992:20;;-1:-1:-1;;;;;5041:31:8;;5031:42;;5021:70;;5087:1;5084;5077:12;5102:254;5170:6;5178;5231:2;5219:9;5210:7;5206:23;5202:32;5199:52;;;5247:1;5244;5237:12;5199:52;5283:9;5270:23;5260:33;;5312:38;5346:2;5335:9;5331:18;5312:38;:::i;:::-;5302:48;;5102:254;;;;;:::o;6028:777::-;6122:6;6130;6138;6191:2;6179:9;6170:7;6166:23;6162:32;6159:52;;;6207:1;6204;6197:12;6159:52;6247:9;6234:23;-1:-1:-1;;;;;6317:2:8;6309:6;6306:14;6303:34;;;6333:1;6330;6323:12;6303:34;6371:6;6360:9;6356:22;6346:32;;6416:7;6409:4;6405:2;6401:13;6397:27;6387:55;;6438:1;6435;6428:12;6387:55;6478:2;6465:16;6504:2;6496:6;6493:14;6490:34;;;6520:1;6517;6510:12;6490:34;6575:7;6568:4;6558:6;6555:1;6551:14;6547:2;6543:23;6539:34;6536:47;6533:67;;;6596:1;6593;6586:12;6533:67;6627:4;6619:13;;;;-1:-1:-1;6651:6:8;-1:-1:-1;6692:20:8;;;6679:34;;6742:14;;;6732:25;;6722:53;;6771:1;6768;6761:12;6722:53;;6794:5;6784:15;;;6028:777;;;;;:::o;6810:466::-;6905:6;6913;6921;6929;6937;6990:3;6978:9;6969:7;6965:23;6961:33;6958:53;;;7007:1;7004;6997:12;6958:53;7043:9;7030:23;7020:33;;7072:38;7106:2;7095:9;7091:18;7072:38;:::i;:::-;7062:48;;7129:38;7163:2;7152:9;7148:18;7129:38;:::i;:::-;6810:466;;;;-1:-1:-1;7119:48:8;;7214:2;7199:18;;7186:32;;-1:-1:-1;7265:3:8;7250:19;7237:33;;6810:466;-1:-1:-1;;6810:466:8:o;7281:658::-;7452:2;7504:21;;;7574:13;;7477:18;;;7596:22;;;7423:4;;7452:2;7675:15;;;;7649:2;7634:18;;;7423:4;7718:195;7732:6;7729:1;7726:13;7718:195;;;7797:13;;-1:-1:-1;;;;;7793:39:8;7781:52;;7888:15;;;;7853:12;;;;7829:1;7747:9;7718:195;;;-1:-1:-1;7930:3:8;;7281:658;-1:-1:-1;;;;;;7281:658:8:o;8499:632::-;8670:2;8722:21;;;8792:13;;8695:18;;;8814:22;;;8641:4;;8670:2;8893:15;;;;8867:2;8852:18;;;8641:4;8936:169;8950:6;8947:1;8944:13;8936:169;;;9011:13;;8999:26;;9080:15;;;;9045:12;;;;8972:1;8965:9;8936:169;;9136:127;9197:10;9192:3;9188:20;9185:1;9178:31;9228:4;9225:1;9218:15;9252:4;9249:1;9242:15;9268:128;9335:9;;;9356:11;;;9353:37;;;9370:18;;:::i;9401:168::-;9474:9;;;9505;;9522:15;;;9516:22;;9502:37;9492:71;;9543:18;;:::i;9574:217::-;9614:1;9640;9630:132;;9684:10;9679:3;9675:20;9672:1;9665:31;9719:4;9716:1;9709:15;9747:4;9744:1;9737:15;9630:132;-1:-1:-1;9776:9:8;;9574:217::o;9796:127::-;9857:10;9852:3;9848:20;9845:1;9838:31;9888:4;9885:1;9878:15;9912:4;9909:1;9902:15;9928:135;9967:3;9988:17;;;9985:43;;10008:18;;:::i;:::-;-1:-1:-1;10055:1:8;10044:13;;9928:135::o;10068:125::-;10133:9;;;10154:10;;;10151:36;;;10167:18;;:::i;11727:186::-;11786:6;11839:2;11827:9;11818:7;11814:23;11810:32;11807:52;;;11855:1;11852;11845:12;11807:52;11878:29;11897:9;11878:29;:::i;12126:730::-;-1:-1:-1;;;;;12382:31:8;;12364:50;;12352:2;12433;12451:18;;;12444:30;;;12337:18;;;12509:22;;;12304:4;;12588:6;;12562:2;12547:18;;12304:4;12622:208;12636:6;12633:1;12630:13;12622:208;;;-1:-1:-1;;;;;12701:26:8;12720:6;12701:26;:::i;:::-;12697:52;12685:65;;12805:15;;;;12770:12;;;;12658:1;12651:9;12622:208;;;-1:-1:-1;12847:3:8;12126:730;-1:-1:-1;;;;;;;12126:730:8:o;13773:184::-;13843:6;13896:2;13884:9;13875:7;13871:23;13867:32;13864:52;;;13912:1;13909;13902:12;13864:52;-1:-1:-1;13935:16:8;;13773:184;-1:-1:-1;13773:184:8:o;13962:375::-;14184:25;;;14172:2;14157:18;;14218:52;14266:2;14251:18;;14243:6;14218:52;:::i;:::-;14279;14327:2;14316:9;14312:18;14304:6;14279:52;:::i;14342:407::-;14580:25;;;14568:2;14553:18;;14614:60;14670:2;14655:18;;14647:6;14614:60;:::i;:::-;14683;14739:2;14728:9;14724:18;14716:6;14683:60;:::i","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","offset":9810}},"immutableReferences":{"1066":[{"start":708,"length":32},{"start":3192,"length":32},{"start":3931,"length":32},{"start":6372,"length":32},{"start":6500,"length":32},{"start":6573,"length":32}]},"transformations":[{"id":"1066","type":"replace","offset":708,"reason":"immutable"},{"id":"1066","type":"replace","offset":3192,"reason":"immutable"},{"id":"1066","type":"replace","offset":3931,"reason":"immutable"},{"id":"1066","type":"replace","offset":6372,"reason":"immutable"},{"id":"1066","type":"replace","offset":6500,"reason":"immutable"},{"id":"1066","type":"replace","offset":6573,"reason":"immutable"}],"transformationValues":{"immutables":{"1066":"0x000000000000000000000000ffc95faa3d63cde504a05b567c600b78c0b41892"}}},"deployment":{"transactionHash":"0x6bbcb9f0a32f2309d4c0e9a76fcd8c0ee000bac2232dad8097ede49115cf0cb0","blockNumber":"315465848","transactionIndex":"4","deployer":"0x9Ef29De25594f88eB51D45Ed9547Bc6463Edbfc6"},"sources":{"src/NetFoldClearing.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\n\n/// @title NetFoldClearing\n/// @notice Bounded, covered multilateral obligation netting for one immutable ERC-20 token.\ncontract NetFoldClearing is ReentrancyGuard {\n    using SafeERC20 for IERC20;\n\n    uint256 public constant MAX_PARTICIPANTS = 8;\n    uint256 public constant MAX_OBLIGATIONS = 32;\n    uint256 public constant MAX_OBLIGATION_AMOUNT = type(uint128).max;\n    uint256 public constant COMPRESSION_BPS_DENOMINATOR = 10_000;\n\n    enum RunState {\n        None,\n        Open,\n        Closed,\n        Covered,\n        Settled,\n        Expired,\n        Refunded,\n        Cancelled\n    }\n\n    enum ObligationStatus {\n        None,\n        Pending,\n        Accepted,\n        Cancelled\n    }\n\n    struct Run {\n        address creator;\n        RunState state;\n        uint64 fundingDeadline;\n        uint64 createdAt;\n        uint64 closedAt;\n        uint64 settledAt;\n        uint64 expiredAt;\n        uint256 grossAmount;\n        uint256 totalNetDebit;\n        uint256 totalFunded;\n        uint256 totalRefunded;\n        address[] participants;\n        uint256[] obligationIds;\n    }\n\n    struct Obligation {\n        uint256 runId;\n        address payer;\n        address payee;\n        uint256 amount;\n        bytes32 referenceHash;\n        ObligationStatus status;\n        uint64 createdAt;\n        uint64 acceptedAt;\n    }\n\n    struct Position {\n        uint256 grossPayable;\n        uint256 grossReceivable;\n        uint256 netDebit;\n        uint256 netCredit;\n        uint256 funded;\n        uint256 refunded;\n    }\n\n    error InvalidSettlementToken();\n    error InvalidParticipantCount(uint256 count);\n    error InvalidParticipant(address participant);\n    error DuplicateParticipant(address participant);\n    error InvalidDeadline(uint256 deadline);\n    error RunNotFound(uint256 runId);\n    error ObligationNotFound(uint256 obligationId);\n    error NotRunCreator(uint256 runId, address caller);\n    error InvalidRunState(uint256 runId, RunState expected, RunState actual);\n    error FundingDeadlineReached(uint256 runId, uint256 deadline);\n    error FundingDeadlineNotReached(uint256 runId, uint256 deadline);\n    error TooManyObligations(uint256 runId);\n    error NotParticipant(uint256 runId, address account);\n    error InvalidObligationParties(address payer, address payee);\n    error ZeroAmount();\n    error AmountTooLarge(uint256 amount);\n    error InvalidReferenceHash();\n    error DuplicateReferenceHash(uint256 runId, bytes32 referenceHash);\n    error InvalidObligationStatus(uint256 obligationId, ObligationStatus expected, ObligationStatus actual);\n    error NotObligationPayer(uint256 obligationId, address caller);\n    error NoObligations(uint256 runId);\n    error UnacceptedObligation(uint256 obligationId);\n    error AccountingMismatch(uint256 totalDebit, uint256 totalCredit);\n    error NoFundingRequired(uint256 runId, address account);\n    error AlreadyFunded(uint256 runId, address account);\n    error UnsupportedTokenTransfer(uint256 expected, uint256 received);\n    error RunNotFullyFunded(uint256 runId, uint256 funded, uint256 required);\n    error NoRefundAvailable(uint256 runId, address account);\n\n    event RunCreated(uint256 indexed runId, address indexed creator, uint64 fundingDeadline, address[] participants);\n    event ObligationProposed(\n        uint256 indexed runId,\n        uint256 indexed obligationId,\n        address indexed payer,\n        address payee,\n        uint256 amount,\n        bytes32 referenceHash\n    );\n    event ObligationAccepted(uint256 indexed runId, uint256 indexed obligationId, address indexed payer);\n    event ObligationCancelled(uint256 indexed runId, uint256 indexed obligationId);\n    event RunClosed(uint256 indexed runId, uint256 grossAmount, uint256 totalNetDebit);\n    event RunCovered(uint256 indexed runId, uint256 totalFunded);\n    event RunFunded(uint256 indexed runId, address indexed debtor, uint256 amount);\n    event SettlementPaid(uint256 indexed runId, address indexed creditor, uint256 amount);\n    event RunSettled(uint256 indexed runId, uint256 totalSettled);\n    event RunExpired(uint256 indexed runId, uint256 totalFunded);\n    event DebtorRefunded(uint256 indexed runId, address indexed debtor, uint256 amount);\n    event RunRefunded(uint256 indexed runId, uint256 totalRefunded);\n    event RunCancelled(uint256 indexed runId);\n\n    IERC20 public immutable settlementToken;\n    uint256 public nextRunId = 1;\n    uint256 public nextObligationId = 1;\n    uint256 public totalEscrowed;\n\n    mapping(uint256 runId => Run run) private _runs;\n    mapping(uint256 obligationId => Obligation obligation) private _obligations;\n    mapping(uint256 runId => mapping(address participant => bool included)) public isParticipant;\n    mapping(uint256 runId => mapping(address participant => Position position)) private _positions;\n    mapping(uint256 runId => mapping(bytes32 referenceHash => bool used)) public usedReferenceHash;\n\n    constructor(IERC20 settlementToken_) {\n        if (address(settlementToken_) == address(0) || address(settlementToken_).code.length == 0) {\n            revert InvalidSettlementToken();\n        }\n        settlementToken = settlementToken_;\n    }\n\n    function createRun(address[] calldata participants, uint64 fundingDeadline) external returns (uint256 runId) {\n        uint256 participantCount = participants.length;\n        if (participantCount < 2 || participantCount > MAX_PARTICIPANTS) {\n            revert InvalidParticipantCount(participantCount);\n        }\n        if (fundingDeadline <= block.timestamp) revert InvalidDeadline(fundingDeadline);\n\n        runId = nextRunId++;\n        Run storage run = _runs[runId];\n        run.creator = msg.sender;\n        run.state = RunState.Open;\n        run.fundingDeadline = fundingDeadline;\n        run.createdAt = uint64(block.timestamp);\n\n        for (uint256 i; i < participantCount; ++i) {\n            address participant = participants[i];\n            if (participant == address(0)) revert InvalidParticipant(participant);\n            if (isParticipant[runId][participant]) revert DuplicateParticipant(participant);\n            isParticipant[runId][participant] = true;\n            run.participants.push(participant);\n        }\n\n        emit RunCreated(runId, msg.sender, fundingDeadline, participants);\n    }\n\n    function proposeObligation(uint256 runId, address payer, address payee, uint256 amount, bytes32 referenceHash)\n        external\n        returns (uint256 obligationId)\n    {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        if (run.obligationIds.length >= MAX_OBLIGATIONS) revert TooManyObligations(runId);\n        if (!isParticipant[runId][payer]) revert NotParticipant(runId, payer);\n        if (!isParticipant[runId][payee]) revert NotParticipant(runId, payee);\n        if (payer == payee) revert InvalidObligationParties(payer, payee);\n        if (amount == 0) revert ZeroAmount();\n        if (amount > MAX_OBLIGATION_AMOUNT) revert AmountTooLarge(amount);\n        if (referenceHash == bytes32(0)) revert InvalidReferenceHash();\n        if (usedReferenceHash[runId][referenceHash]) {\n            revert DuplicateReferenceHash(runId, referenceHash);\n        }\n\n        obligationId = nextObligationId++;\n        _obligations[obligationId] = Obligation({\n            runId: runId,\n            payer: payer,\n            payee: payee,\n            amount: amount,\n            referenceHash: referenceHash,\n            status: ObligationStatus.Pending,\n            createdAt: uint64(block.timestamp),\n            acceptedAt: 0\n        });\n        usedReferenceHash[runId][referenceHash] = true;\n        run.obligationIds.push(obligationId);\n\n        emit ObligationProposed(runId, obligationId, payer, payee, amount, referenceHash);\n    }\n\n    function acceptObligation(uint256 runId, uint256 obligationId) external {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        Obligation storage obligation = _getObligation(obligationId);\n        if (obligation.runId != runId) revert ObligationNotFound(obligationId);\n        if (obligation.payer != msg.sender) revert NotObligationPayer(obligationId, msg.sender);\n        _requireObligationStatus(obligationId, obligation, ObligationStatus.Pending);\n\n        obligation.status = ObligationStatus.Accepted;\n        obligation.acceptedAt = uint64(block.timestamp);\n        emit ObligationAccepted(runId, obligationId, msg.sender);\n    }\n\n    function cancelObligation(uint256 runId, uint256 obligationId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        Obligation storage obligation = _getObligation(obligationId);\n        if (obligation.runId != runId) revert ObligationNotFound(obligationId);\n        _requireObligationStatus(obligationId, obligation, ObligationStatus.Pending);\n\n        obligation.status = ObligationStatus.Cancelled;\n        emit ObligationCancelled(runId, obligationId);\n    }\n\n    function cancelRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        run.state = RunState.Cancelled;\n        emit RunCancelled(runId);\n    }\n\n    function closeRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        uint256 obligationCount = run.obligationIds.length;\n        if (obligationCount == 0) revert NoObligations(runId);\n\n        uint256 grossAmount;\n        uint256 activeObligationCount;\n        for (uint256 i; i < obligationCount; ++i) {\n            uint256 obligationId = run.obligationIds[i];\n            Obligation storage obligation = _obligations[obligationId];\n            if (obligation.status == ObligationStatus.Cancelled) continue;\n            if (obligation.status != ObligationStatus.Accepted) {\n                revert UnacceptedObligation(obligationId);\n            }\n            ++activeObligationCount;\n            grossAmount += obligation.amount;\n            _positions[runId][obligation.payer].grossPayable += obligation.amount;\n            _positions[runId][obligation.payee].grossReceivable += obligation.amount;\n        }\n        if (activeObligationCount == 0) revert NoObligations(runId);\n\n        uint256 totalDebit;\n        uint256 totalCredit;\n        uint256 participantCount = run.participants.length;\n        for (uint256 i; i < participantCount; ++i) {\n            Position storage position = _positions[runId][run.participants[i]];\n            if (position.grossPayable > position.grossReceivable) {\n                position.netDebit = position.grossPayable - position.grossReceivable;\n                totalDebit += position.netDebit;\n            } else if (position.grossReceivable > position.grossPayable) {\n                position.netCredit = position.grossReceivable - position.grossPayable;\n                totalCredit += position.netCredit;\n            }\n        }\n        if (totalDebit != totalCredit) revert AccountingMismatch(totalDebit, totalCredit);\n\n        run.grossAmount = grossAmount;\n        run.totalNetDebit = totalDebit;\n        run.closedAt = uint64(block.timestamp);\n        run.state = totalDebit == 0 ? RunState.Covered : RunState.Closed;\n\n        emit RunClosed(runId, grossAmount, totalDebit);\n        if (totalDebit == 0) emit RunCovered(runId, 0);\n    }\n\n    /// @notice Funds the caller's entire finalized net debit in one transfer.\n    function fund(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Closed);\n        _requireBeforeDeadline(runId, run);\n\n        Position storage position = _positions[runId][msg.sender];\n        uint256 amount = position.netDebit;\n        if (amount == 0) revert NoFundingRequired(runId, msg.sender);\n        if (position.funded != 0) revert AlreadyFunded(runId, msg.sender);\n\n        position.funded = amount;\n        run.totalFunded += amount;\n        totalEscrowed += amount;\n\n        uint256 balanceBefore = settlementToken.balanceOf(address(this));\n        settlementToken.safeTransferFrom(msg.sender, address(this), amount);\n        uint256 received = settlementToken.balanceOf(address(this)) - balanceBefore;\n        if (received != amount) revert UnsupportedTokenTransfer(amount, received);\n\n        emit RunFunded(runId, msg.sender, amount);\n        if (run.totalFunded == run.totalNetDebit) {\n            run.state = RunState.Covered;\n            emit RunCovered(runId, run.totalFunded);\n        }\n    }\n\n    function settleRun(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Covered);\n        if (run.totalFunded != run.totalNetDebit) {\n            revert RunNotFullyFunded(runId, run.totalFunded, run.totalNetDebit);\n        }\n\n        run.state = RunState.Settled;\n        run.settledAt = uint64(block.timestamp);\n        totalEscrowed -= run.totalNetDebit;\n\n        uint256 participantCount = run.participants.length;\n        for (uint256 i; i < participantCount; ++i) {\n            address participant = run.participants[i];\n            uint256 amount = _positions[runId][participant].netCredit;\n            if (amount == 0) continue;\n            settlementToken.safeTransfer(participant, amount);\n            emit SettlementPaid(runId, participant, amount);\n        }\n\n        emit RunSettled(runId, run.totalNetDebit);\n    }\n\n    function expireRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Closed);\n        if (block.timestamp < run.fundingDeadline) {\n            revert FundingDeadlineNotReached(runId, run.fundingDeadline);\n        }\n\n        run.state = RunState.Expired;\n        run.expiredAt = uint64(block.timestamp);\n        emit RunExpired(runId, run.totalFunded);\n\n        if (run.totalFunded == 0) {\n            run.state = RunState.Refunded;\n            emit RunRefunded(runId, 0);\n        }\n    }\n\n    function claimRefund(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Expired);\n\n        Position storage position = _positions[runId][msg.sender];\n        uint256 amount = position.funded - position.refunded;\n        if (amount == 0) revert NoRefundAvailable(runId, msg.sender);\n\n        position.refunded += amount;\n        run.totalRefunded += amount;\n        totalEscrowed -= amount;\n\n        if (run.totalRefunded == run.totalFunded) {\n            run.state = RunState.Refunded;\n            emit RunRefunded(runId, run.totalRefunded);\n        }\n\n        settlementToken.safeTransfer(msg.sender, amount);\n        emit DebtorRefunded(runId, msg.sender, amount);\n    }\n\n    function getRun(uint256 runId) external view returns (Run memory) {\n        Run storage run = _getRun(runId);\n        return run;\n    }\n\n    function getParticipants(uint256 runId) external view returns (address[] memory) {\n        return _getRun(runId).participants;\n    }\n\n    function getObligationIds(uint256 runId) external view returns (uint256[] memory) {\n        return _getRun(runId).obligationIds;\n    }\n\n    function getObligation(uint256 obligationId) external view returns (Obligation memory) {\n        return _getObligation(obligationId);\n    }\n\n    function getPosition(uint256 runId, address participant) external view returns (Position memory) {\n        _getRun(runId);\n        if (!isParticipant[runId][participant]) revert NotParticipant(runId, participant);\n        return _positions[runId][participant];\n    }\n\n    function requiredFunding(uint256 runId, address participant) external view returns (uint256) {\n        _getRun(runId);\n        if (!isParticipant[runId][participant]) revert NotParticipant(runId, participant);\n        Position storage position = _positions[runId][participant];\n        return position.netDebit - position.funded;\n    }\n\n    function compressionBps(uint256 runId) external view returns (uint256) {\n        Run storage run = _getRun(runId);\n        if (run.grossAmount == 0) return 0;\n        return ((run.grossAmount - run.totalNetDebit) * COMPRESSION_BPS_DENOMINATOR) / run.grossAmount;\n    }\n\n    function _getRun(uint256 runId) private view returns (Run storage run) {\n        run = _runs[runId];\n        if (run.state == RunState.None) revert RunNotFound(runId);\n    }\n\n    function _getObligation(uint256 obligationId) private view returns (Obligation storage obligation) {\n        obligation = _obligations[obligationId];\n        if (obligation.status == ObligationStatus.None) revert ObligationNotFound(obligationId);\n    }\n\n    function _requireCreator(uint256 runId, Run storage run) private view {\n        if (run.creator != msg.sender) revert NotRunCreator(runId, msg.sender);\n    }\n\n    function _requireState(uint256 runId, Run storage run, RunState expected) private view {\n        if (run.state != expected) revert InvalidRunState(runId, expected, run.state);\n    }\n\n    function _requireBeforeDeadline(uint256 runId, Run storage run) private view {\n        if (block.timestamp >= run.fundingDeadline) {\n            revert FundingDeadlineReached(runId, run.fundingDeadline);\n        }\n    }\n\n    function _requireObligationStatus(uint256 obligationId, Obligation storage obligation, ObligationStatus expected)\n        private\n        view\n    {\n        if (obligation.status != expected) {\n            revert InvalidObligationStatus(obligationId, expected, obligation.status);\n        }\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    /**\n     * @dev An operation with an ERC-20 token failed.\n     */\n    error SafeERC20FailedOperation(address token);\n\n    /**\n     * @dev Indicates a failed `decreaseAllowance` request.\n     */\n    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n    /**\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n     */\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 oldAllowance = token.allowance(address(this), spender);\n        forceApprove(token, spender, oldAllowance + value);\n    }\n\n    /**\n     * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n     * value, non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n        unchecked {\n            uint256 currentAllowance = token.allowance(address(this), spender);\n            if (currentAllowance < requestedDecrease) {\n                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n            }\n            forceApprove(token, spender, currentAllowance - requestedDecrease);\n        }\n    }\n\n    /**\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n     * to be set to zero before setting it to a non-zero value, such as USDT.\n     *\n     * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n     * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n     * set here.\n     */\n    function forceApprove(IERC20 token, address spender, uint256 value) internal {\n        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n        if (!_callOptionalReturnBool(token, approvalCall)) {\n            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n            _callOptionalReturn(token, approvalCall);\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            safeTransfer(token, to, value);\n        } else if (!token.transferAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n     * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferFromAndCallRelaxed(\n        IERC1363 token,\n        address from,\n        address to,\n        uint256 value,\n        bytes memory data\n    ) internal {\n        if (to.code.length == 0) {\n            safeTransferFrom(token, from, to, value);\n        } else if (!token.transferFromAndCall(from, to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n     * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n     * once without retrying, and relies on the returned value to be true.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            forceApprove(token, to, value);\n        } else if (!token.approveAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            // bubble errors\n            if iszero(success) {\n                let ptr := mload(0x40)\n                returndatacopy(ptr, 0, returndatasize())\n                revert(ptr, returndatasize())\n            }\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n\n        if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n     */\n    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n        bool success;\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n        return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n    /*\n     * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n     * 0xb0202a11 ===\n     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n     */\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @param data Additional data with no specified format, sent in call to `spender`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.24+commit.e11b9ed9","compilerSettings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"]},"name":"NetFoldClearing","fullyQualifiedName":"src/NetFoldClearing.sol:NetFoldClearing"},"abi":[{"type":"constructor","inputs":[{"name":"settlementToken_","type":"address","internalType":"contract IERC20"}],"stateMutability":"nonpayable"},{"name":"AccountingMismatch","type":"error","inputs":[{"name":"totalDebit","type":"uint256","internalType":"uint256"},{"name":"totalCredit","type":"uint256","internalType":"uint256"}]},{"name":"AlreadyFunded","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"AmountTooLarge","type":"error","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"DuplicateParticipant","type":"error","inputs":[{"name":"participant","type":"address","internalType":"address"}]},{"name":"DuplicateReferenceHash","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}]},{"name":"FundingDeadlineNotReached","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"FundingDeadlineReached","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"InvalidDeadline","type":"error","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"InvalidObligationParties","type":"error","inputs":[{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"}]},{"name":"InvalidObligationStatus","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"},{"name":"expected","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"},{"name":"actual","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"}]},{"name":"InvalidParticipant","type":"error","inputs":[{"name":"participant","type":"address","internalType":"address"}]},{"name":"InvalidParticipantCount","type":"error","inputs":[{"name":"count","type":"uint256","internalType":"uint256"}]},{"name":"InvalidReferenceHash","type":"error","inputs":[]},{"name":"InvalidRunState","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"expected","type":"uint8","internalType":"enum NetFoldClearing.RunState"},{"name":"actual","type":"uint8","internalType":"enum NetFoldClearing.RunState"}]},{"name":"InvalidSettlementToken","type":"error","inputs":[]},{"name":"NoFundingRequired","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NoObligations","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"NoRefundAvailable","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NotObligationPayer","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"},{"name":"caller","type":"address","internalType":"address"}]},{"name":"NotParticipant","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NotRunCreator","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"caller","type":"address","internalType":"address"}]},{"name":"ObligationNotFound","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}]},{"name":"ReentrancyGuardReentrantCall","type":"error","inputs":[]},{"name":"RunNotFound","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"RunNotFullyFunded","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"funded","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint256","internalType":"uint256"}]},{"name":"SafeERC20FailedOperation","type":"error","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"name":"TooManyObligations","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"UnacceptedObligation","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}]},{"name":"UnsupportedTokenTransfer","type":"error","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"received","type":"uint256","internalType":"uint256"}]},{"name":"ZeroAmount","type":"error","inputs":[]},{"name":"DebtorRefunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ObligationAccepted","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"ObligationCancelled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ObligationProposed","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":true,"internalType":"address"},{"name":"payee","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"referenceHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"name":"RunCancelled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"RunClosed","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"grossAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"totalNetDebit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunCovered","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalFunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunCreated","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"creator","type":"address","indexed":true,"internalType":"address"},{"name":"fundingDeadline","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"participants","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"name":"RunExpired","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalFunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunFunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunRefunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalRefunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunSettled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalSettled","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"SettlementPaid","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"creditor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"COMPRESSION_BPS_DENOMINATOR","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_OBLIGATIONS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_OBLIGATION_AMOUNT","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PARTICIPANTS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"acceptObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"claimRefund","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"closeRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"compressionBps","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"createRun","type":"function","inputs":[{"name":"participants","type":"address[]","internalType":"address[]"},{"name":"fundingDeadline","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"expireRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"fund","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"getObligation","type":"function","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"},{"name":"status","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"},{"name":"createdAt","type":"uint64","internalType":"uint64"},{"name":"acceptedAt","type":"uint64","internalType":"uint64"}],"internalType":"struct NetFoldClearing.Obligation"}],"stateMutability":"view"},{"name":"getObligationIds","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"name":"getParticipants","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"name":"getPosition","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"grossPayable","type":"uint256","internalType":"uint256"},{"name":"grossReceivable","type":"uint256","internalType":"uint256"},{"name":"netDebit","type":"uint256","internalType":"uint256"},{"name":"netCredit","type":"uint256","internalType":"uint256"},{"name":"funded","type":"uint256","internalType":"uint256"},{"name":"refunded","type":"uint256","internalType":"uint256"}],"internalType":"struct NetFoldClearing.Position"}],"stateMutability":"view"},{"name":"getRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"creator","type":"address","internalType":"address"},{"name":"state","type":"uint8","internalType":"enum NetFoldClearing.RunState"},{"name":"fundingDeadline","type":"uint64","internalType":"uint64"},{"name":"createdAt","type":"uint64","internalType":"uint64"},{"name":"closedAt","type":"uint64","internalType":"uint64"},{"name":"settledAt","type":"uint64","internalType":"uint64"},{"name":"expiredAt","type":"uint64","internalType":"uint64"},{"name":"grossAmount","type":"uint256","internalType":"uint256"},{"name":"totalNetDebit","type":"uint256","internalType":"uint256"},{"name":"totalFunded","type":"uint256","internalType":"uint256"},{"name":"totalRefunded","type":"uint256","internalType":"uint256"},{"name":"participants","type":"address[]","internalType":"address[]"},{"name":"obligationIds","type":"uint256[]","internalType":"uint256[]"}],"internalType":"struct NetFoldClearing.Run"}],"stateMutability":"view"},{"name":"isParticipant","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"included","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"nextObligationId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"nextRunId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"proposeObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"requiredFunding","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"settleRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"settlementToken","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"name":"totalEscrowed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"usedReferenceHash","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"used","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"settlementToken_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"totalDebit","type":"uint256"},{"internalType":"uint256","name":"totalCredit","type":"uint256"}],"name":"AccountingMismatch","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyFunded","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AmountTooLarge","type":"error"},{"inputs":[{"internalType":"address","name":"participant","type":"address"}],"name":"DuplicateParticipant","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"bytes32","name":"referenceHash","type":"bytes32"}],"name":"DuplicateReferenceHash","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"FundingDeadlineNotReached","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"FundingDeadlineReached","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"InvalidDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"payee","type":"address"}],"name":"InvalidObligationParties","type":"error"},{"inputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"},{"internalType":"enum NetFoldClearing.ObligationStatus","name":"expected","type":"uint8"},{"internalType":"enum NetFoldClearing.ObligationStatus","name":"actual","type":"uint8"}],"name":"InvalidObligationStatus","type":"error"},{"inputs":[{"internalType":"address","name":"participant","type":"address"}],"name":"InvalidParticipant","type":"error"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"InvalidParticipantCount","type":"error"},{"inputs":[],"name":"InvalidReferenceHash","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"enum NetFoldClearing.RunState","name":"expected","type":"uint8"},{"internalType":"enum NetFoldClearing.RunState","name":"actual","type":"uint8"}],"name":"InvalidRunState","type":"error"},{"inputs":[],"name":"InvalidSettlementToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"NoFundingRequired","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"NoObligations","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"NoRefundAvailable","type":"error"},{"inputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"},{"internalType":"address","name":"caller","type":"address"}],"name":"NotObligationPayer","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"NotParticipant","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"caller","type":"address"}],"name":"NotRunCreator","type":"error"},{"inputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"ObligationNotFound","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"RunNotFound","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"uint256","name":"funded","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"RunNotFullyFunded","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"TooManyObligations","type":"error"},{"inputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"UnacceptedObligation","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnsupportedTokenTransfer","type":"error"},{"inputs":[],"name":"ZeroAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DebtorRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"obligationId","type":"uint256"},{"indexed":true,"internalType":"address","name":"payer","type":"address"}],"name":"ObligationAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"ObligationCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"obligationId","type":"uint256"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"referenceHash","type":"bytes32"}],"name":"ObligationProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"}],"name":"RunCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"grossAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalNetDebit","type":"uint256"}],"name":"RunClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFunded","type":"uint256"}],"name":"RunCovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint64","name":"fundingDeadline","type":"uint64"},{"indexed":false,"internalType":"address[]","name":"participants","type":"address[]"}],"name":"RunCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFunded","type":"uint256"}],"name":"RunExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RunFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalRefunded","type":"uint256"}],"name":"RunRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSettled","type":"uint256"}],"name":"RunSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"runId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SettlementPaid","type":"event"},{"inputs":[],"name":"COMPRESSION_BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OBLIGATIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OBLIGATION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PARTICIPANTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"acceptObligation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"cancelObligation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"cancelRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"claimRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"closeRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"compressionBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"uint64","name":"fundingDeadline","type":"uint64"}],"name":"createRun","outputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"expireRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"fund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"}],"name":"getObligation","outputs":[{"components":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"referenceHash","type":"bytes32"},{"internalType":"enum NetFoldClearing.ObligationStatus","name":"status","type":"uint8"},{"internalType":"uint64","name":"createdAt","type":"uint64"},{"internalType":"uint64","name":"acceptedAt","type":"uint64"}],"internalType":"struct NetFoldClearing.Obligation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"getObligationIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"getParticipants","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"name":"getPosition","outputs":[{"components":[{"internalType":"uint256","name":"grossPayable","type":"uint256"},{"internalType":"uint256","name":"grossReceivable","type":"uint256"},{"internalType":"uint256","name":"netDebit","type":"uint256"},{"internalType":"uint256","name":"netCredit","type":"uint256"},{"internalType":"uint256","name":"funded","type":"uint256"},{"internalType":"uint256","name":"refunded","type":"uint256"}],"internalType":"struct NetFoldClearing.Position","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"getRun","outputs":[{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"enum NetFoldClearing.RunState","name":"state","type":"uint8"},{"internalType":"uint64","name":"fundingDeadline","type":"uint64"},{"internalType":"uint64","name":"createdAt","type":"uint64"},{"internalType":"uint64","name":"closedAt","type":"uint64"},{"internalType":"uint64","name":"settledAt","type":"uint64"},{"internalType":"uint64","name":"expiredAt","type":"uint64"},{"internalType":"uint256","name":"grossAmount","type":"uint256"},{"internalType":"uint256","name":"totalNetDebit","type":"uint256"},{"internalType":"uint256","name":"totalFunded","type":"uint256"},{"internalType":"uint256","name":"totalRefunded","type":"uint256"},{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"uint256[]","name":"obligationIds","type":"uint256[]"}],"internalType":"struct NetFoldClearing.Run","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"name":"isParticipant","outputs":[{"internalType":"bool","name":"included","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextObligationId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRunId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"payer","type":"address"},{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"referenceHash","type":"bytes32"}],"name":"proposeObligation","outputs":[{"internalType":"uint256","name":"obligationId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"name":"requiredFunding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"}],"name":"settleRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settlementToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEscrowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"runId","type":"uint256"},{"internalType":"bytes32","name":"referenceHash","type":"bytes32"}],"name":"usedReferenceHash","outputs":[{"internalType":"bool","name":"used","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"errors":{"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"SafeERC20FailedOperation(address)":[{"details":"An operation with an ERC-20 token failed."}]},"kind":"dev","methods":{},"title":"NetFoldClearing","version":1},"userdoc":{"kind":"user","methods":{"fund(uint256)":{"notice":"Funds the caller's entire finalized net debit in one transfer."}},"notice":"Bounded, covered multilateral obligation netting for one immutable ERC-20 token.","version":1}},"settings":{"compilationTarget":{"src/NetFoldClearing.sol":"NetFoldClearing"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",":forge-std/=lib/forge-std/src/",":openzeppelin-contracts/=lib/openzeppelin-contracts/"]},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d","license":"MIT","urls":["bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100","dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d"]},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc","license":"MIT","urls":["bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037","dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ"]},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44","license":"MIT","urls":["bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d","dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF"]},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","license":"MIT","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"]},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5","license":"MIT","urls":["bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508","dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"]},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","license":"MIT","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"]},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c","license":"MIT","urls":["bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617","dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u"]},"src/NetFoldClearing.sol":{"keccak256":"0x3888f1c87c25e8a1ce164275a0f10d3a63d791ced75110b8033e4ca178fc3493","license":"MIT","urls":["bzz-raw://b1309b9f25f5982e061df5bb26a131b57ac84496c4307e176ef89786ca10fa4e","dweb:/ipfs/QmQKCnPThUghqNUELTjoi6LJDEdeZ7GpAMg5ALL1GFss1H"]}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_uint64":{"label":"uint64","encoding":"inplace","numberOfBytes":"8"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_enum(RunState)752":{"label":"enum NetFoldClearing.RunState","encoding":"inplace","numberOfBytes":"1"},"t_struct(Run)787_storage":{"label":"struct NetFoldClearing.Run","members":[{"slot":"0","type":"t_address","astId":759,"label":"creator","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"0","type":"t_enum(RunState)752","astId":762,"label":"state","offset":20,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"0","type":"t_uint64","astId":764,"label":"fundingDeadline","offset":21,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":766,"label":"createdAt","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":768,"label":"closedAt","offset":8,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":770,"label":"settledAt","offset":16,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":772,"label":"expiredAt","offset":24,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":774,"label":"grossAmount","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":776,"label":"totalNetDebit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_uint256","astId":778,"label":"totalFunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint256","astId":780,"label":"totalRefunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"6","type":"t_array(t_address)dyn_storage","astId":783,"label":"participants","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"7","type":"t_array(t_uint256)dyn_storage","astId":786,"label":"obligationIds","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"256"},"t_enum(ObligationStatus)757":{"label":"enum NetFoldClearing.ObligationStatus","encoding":"inplace","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"key":"t_address","label":"mapping(address => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"key":"t_bytes32","label":"mapping(bytes32 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_array(t_address)dyn_storage":{"base":"t_address","label":"address[]","encoding":"dynamic_array","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","label":"uint256[]","encoding":"dynamic_array","numberOfBytes":"32"},"t_struct(Position)818_storage":{"label":"struct NetFoldClearing.Position","members":[{"slot":"0","type":"t_uint256","astId":807,"label":"grossPayable","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint256","astId":809,"label":"grossReceivable","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":811,"label":"netDebit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":813,"label":"netCredit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_uint256","astId":815,"label":"funded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint256","astId":817,"label":"refunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"192"},"t_struct(Obligation)805_storage":{"label":"struct NetFoldClearing.Obligation","members":[{"slot":"0","type":"t_uint256","astId":789,"label":"runId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_address","astId":791,"label":"payer","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_address","astId":793,"label":"payee","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":795,"label":"amount","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_bytes32","astId":797,"label":"referenceHash","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_enum(ObligationStatus)757","astId":800,"label":"status","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint64","astId":802,"label":"createdAt","offset":1,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint64","astId":804,"label":"acceptedAt","offset":9,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"192"},"t_mapping(t_uint256,t_struct(Run)787_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct NetFoldClearing.Run)","value":"t_struct(Run)787_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_address,t_bool))":{"key":"t_uint256","label":"mapping(uint256 => mapping(address => bool))","value":"t_mapping(t_address,t_bool)","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_bool))":{"key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => bool))","value":"t_mapping(t_bytes32,t_bool)","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_struct(Position)818_storage)":{"key":"t_address","label":"mapping(address => struct NetFoldClearing.Position)","value":"t_struct(Position)818_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_struct(Obligation)805_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct NetFoldClearing.Obligation)","value":"t_struct(Obligation)805_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(Position)818_storage))":{"key":"t_uint256","label":"mapping(uint256 => mapping(address => struct NetFoldClearing.Position))","value":"t_mapping(t_address,t_struct(Position)818_storage)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":642,"label":"_status","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint256","astId":1069,"label":"nextRunId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":1072,"label":"nextObligationId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":1074,"label":"totalEscrowed","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_mapping(t_uint256,t_struct(Run)787_storage)","astId":1079,"label":"_runs","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_mapping(t_uint256,t_struct(Obligation)805_storage)","astId":1084,"label":"_obligations","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"6","type":"t_mapping(t_uint256,t_mapping(t_address,t_bool))","astId":1090,"label":"isParticipant","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"7","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(Position)818_storage))","astId":1097,"label":"_positions","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_bool))","astId":1103,"label":"usedReferenceHash","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"Bounded, covered multilateral obligation netting for one immutable ERC-20 token.","methods":{"fund(uint256)":{"notice":"Funds the caller's entire finalized net debit in one transfer."}},"version":1},"devdoc":{"kind":"dev","title":"NetFoldClearing","errors":{"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"SafeERC20FailedOperation(address)":[{"details":"An operation with an ERC-20 token failed."}]},"methods":{},"version":1},"sourceIds":{"src/NetFoldClearing.sol":{"id":7},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"id":2},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"id":1},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"id":3},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"id":0},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"id":5},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"id":4},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"id":6}},"additionalInput":null,"stdJsonInput":{"sources":{"src/NetFoldClearing.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\n\n/// @title NetFoldClearing\n/// @notice Bounded, covered multilateral obligation netting for one immutable ERC-20 token.\ncontract NetFoldClearing is ReentrancyGuard {\n    using SafeERC20 for IERC20;\n\n    uint256 public constant MAX_PARTICIPANTS = 8;\n    uint256 public constant MAX_OBLIGATIONS = 32;\n    uint256 public constant MAX_OBLIGATION_AMOUNT = type(uint128).max;\n    uint256 public constant COMPRESSION_BPS_DENOMINATOR = 10_000;\n\n    enum RunState {\n        None,\n        Open,\n        Closed,\n        Covered,\n        Settled,\n        Expired,\n        Refunded,\n        Cancelled\n    }\n\n    enum ObligationStatus {\n        None,\n        Pending,\n        Accepted,\n        Cancelled\n    }\n\n    struct Run {\n        address creator;\n        RunState state;\n        uint64 fundingDeadline;\n        uint64 createdAt;\n        uint64 closedAt;\n        uint64 settledAt;\n        uint64 expiredAt;\n        uint256 grossAmount;\n        uint256 totalNetDebit;\n        uint256 totalFunded;\n        uint256 totalRefunded;\n        address[] participants;\n        uint256[] obligationIds;\n    }\n\n    struct Obligation {\n        uint256 runId;\n        address payer;\n        address payee;\n        uint256 amount;\n        bytes32 referenceHash;\n        ObligationStatus status;\n        uint64 createdAt;\n        uint64 acceptedAt;\n    }\n\n    struct Position {\n        uint256 grossPayable;\n        uint256 grossReceivable;\n        uint256 netDebit;\n        uint256 netCredit;\n        uint256 funded;\n        uint256 refunded;\n    }\n\n    error InvalidSettlementToken();\n    error InvalidParticipantCount(uint256 count);\n    error InvalidParticipant(address participant);\n    error DuplicateParticipant(address participant);\n    error InvalidDeadline(uint256 deadline);\n    error RunNotFound(uint256 runId);\n    error ObligationNotFound(uint256 obligationId);\n    error NotRunCreator(uint256 runId, address caller);\n    error InvalidRunState(uint256 runId, RunState expected, RunState actual);\n    error FundingDeadlineReached(uint256 runId, uint256 deadline);\n    error FundingDeadlineNotReached(uint256 runId, uint256 deadline);\n    error TooManyObligations(uint256 runId);\n    error NotParticipant(uint256 runId, address account);\n    error InvalidObligationParties(address payer, address payee);\n    error ZeroAmount();\n    error AmountTooLarge(uint256 amount);\n    error InvalidReferenceHash();\n    error DuplicateReferenceHash(uint256 runId, bytes32 referenceHash);\n    error InvalidObligationStatus(uint256 obligationId, ObligationStatus expected, ObligationStatus actual);\n    error NotObligationPayer(uint256 obligationId, address caller);\n    error NoObligations(uint256 runId);\n    error UnacceptedObligation(uint256 obligationId);\n    error AccountingMismatch(uint256 totalDebit, uint256 totalCredit);\n    error NoFundingRequired(uint256 runId, address account);\n    error AlreadyFunded(uint256 runId, address account);\n    error UnsupportedTokenTransfer(uint256 expected, uint256 received);\n    error RunNotFullyFunded(uint256 runId, uint256 funded, uint256 required);\n    error NoRefundAvailable(uint256 runId, address account);\n\n    event RunCreated(uint256 indexed runId, address indexed creator, uint64 fundingDeadline, address[] participants);\n    event ObligationProposed(\n        uint256 indexed runId,\n        uint256 indexed obligationId,\n        address indexed payer,\n        address payee,\n        uint256 amount,\n        bytes32 referenceHash\n    );\n    event ObligationAccepted(uint256 indexed runId, uint256 indexed obligationId, address indexed payer);\n    event ObligationCancelled(uint256 indexed runId, uint256 indexed obligationId);\n    event RunClosed(uint256 indexed runId, uint256 grossAmount, uint256 totalNetDebit);\n    event RunCovered(uint256 indexed runId, uint256 totalFunded);\n    event RunFunded(uint256 indexed runId, address indexed debtor, uint256 amount);\n    event SettlementPaid(uint256 indexed runId, address indexed creditor, uint256 amount);\n    event RunSettled(uint256 indexed runId, uint256 totalSettled);\n    event RunExpired(uint256 indexed runId, uint256 totalFunded);\n    event DebtorRefunded(uint256 indexed runId, address indexed debtor, uint256 amount);\n    event RunRefunded(uint256 indexed runId, uint256 totalRefunded);\n    event RunCancelled(uint256 indexed runId);\n\n    IERC20 public immutable settlementToken;\n    uint256 public nextRunId = 1;\n    uint256 public nextObligationId = 1;\n    uint256 public totalEscrowed;\n\n    mapping(uint256 runId => Run run) private _runs;\n    mapping(uint256 obligationId => Obligation obligation) private _obligations;\n    mapping(uint256 runId => mapping(address participant => bool included)) public isParticipant;\n    mapping(uint256 runId => mapping(address participant => Position position)) private _positions;\n    mapping(uint256 runId => mapping(bytes32 referenceHash => bool used)) public usedReferenceHash;\n\n    constructor(IERC20 settlementToken_) {\n        if (address(settlementToken_) == address(0) || address(settlementToken_).code.length == 0) {\n            revert InvalidSettlementToken();\n        }\n        settlementToken = settlementToken_;\n    }\n\n    function createRun(address[] calldata participants, uint64 fundingDeadline) external returns (uint256 runId) {\n        uint256 participantCount = participants.length;\n        if (participantCount < 2 || participantCount > MAX_PARTICIPANTS) {\n            revert InvalidParticipantCount(participantCount);\n        }\n        if (fundingDeadline <= block.timestamp) revert InvalidDeadline(fundingDeadline);\n\n        runId = nextRunId++;\n        Run storage run = _runs[runId];\n        run.creator = msg.sender;\n        run.state = RunState.Open;\n        run.fundingDeadline = fundingDeadline;\n        run.createdAt = uint64(block.timestamp);\n\n        for (uint256 i; i < participantCount; ++i) {\n            address participant = participants[i];\n            if (participant == address(0)) revert InvalidParticipant(participant);\n            if (isParticipant[runId][participant]) revert DuplicateParticipant(participant);\n            isParticipant[runId][participant] = true;\n            run.participants.push(participant);\n        }\n\n        emit RunCreated(runId, msg.sender, fundingDeadline, participants);\n    }\n\n    function proposeObligation(uint256 runId, address payer, address payee, uint256 amount, bytes32 referenceHash)\n        external\n        returns (uint256 obligationId)\n    {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        if (run.obligationIds.length >= MAX_OBLIGATIONS) revert TooManyObligations(runId);\n        if (!isParticipant[runId][payer]) revert NotParticipant(runId, payer);\n        if (!isParticipant[runId][payee]) revert NotParticipant(runId, payee);\n        if (payer == payee) revert InvalidObligationParties(payer, payee);\n        if (amount == 0) revert ZeroAmount();\n        if (amount > MAX_OBLIGATION_AMOUNT) revert AmountTooLarge(amount);\n        if (referenceHash == bytes32(0)) revert InvalidReferenceHash();\n        if (usedReferenceHash[runId][referenceHash]) {\n            revert DuplicateReferenceHash(runId, referenceHash);\n        }\n\n        obligationId = nextObligationId++;\n        _obligations[obligationId] = Obligation({\n            runId: runId,\n            payer: payer,\n            payee: payee,\n            amount: amount,\n            referenceHash: referenceHash,\n            status: ObligationStatus.Pending,\n            createdAt: uint64(block.timestamp),\n            acceptedAt: 0\n        });\n        usedReferenceHash[runId][referenceHash] = true;\n        run.obligationIds.push(obligationId);\n\n        emit ObligationProposed(runId, obligationId, payer, payee, amount, referenceHash);\n    }\n\n    function acceptObligation(uint256 runId, uint256 obligationId) external {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        Obligation storage obligation = _getObligation(obligationId);\n        if (obligation.runId != runId) revert ObligationNotFound(obligationId);\n        if (obligation.payer != msg.sender) revert NotObligationPayer(obligationId, msg.sender);\n        _requireObligationStatus(obligationId, obligation, ObligationStatus.Pending);\n\n        obligation.status = ObligationStatus.Accepted;\n        obligation.acceptedAt = uint64(block.timestamp);\n        emit ObligationAccepted(runId, obligationId, msg.sender);\n    }\n\n    function cancelObligation(uint256 runId, uint256 obligationId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        Obligation storage obligation = _getObligation(obligationId);\n        if (obligation.runId != runId) revert ObligationNotFound(obligationId);\n        _requireObligationStatus(obligationId, obligation, ObligationStatus.Pending);\n\n        obligation.status = ObligationStatus.Cancelled;\n        emit ObligationCancelled(runId, obligationId);\n    }\n\n    function cancelRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        run.state = RunState.Cancelled;\n        emit RunCancelled(runId);\n    }\n\n    function closeRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireCreator(runId, run);\n        _requireState(runId, run, RunState.Open);\n        _requireBeforeDeadline(runId, run);\n\n        uint256 obligationCount = run.obligationIds.length;\n        if (obligationCount == 0) revert NoObligations(runId);\n\n        uint256 grossAmount;\n        uint256 activeObligationCount;\n        for (uint256 i; i < obligationCount; ++i) {\n            uint256 obligationId = run.obligationIds[i];\n            Obligation storage obligation = _obligations[obligationId];\n            if (obligation.status == ObligationStatus.Cancelled) continue;\n            if (obligation.status != ObligationStatus.Accepted) {\n                revert UnacceptedObligation(obligationId);\n            }\n            ++activeObligationCount;\n            grossAmount += obligation.amount;\n            _positions[runId][obligation.payer].grossPayable += obligation.amount;\n            _positions[runId][obligation.payee].grossReceivable += obligation.amount;\n        }\n        if (activeObligationCount == 0) revert NoObligations(runId);\n\n        uint256 totalDebit;\n        uint256 totalCredit;\n        uint256 participantCount = run.participants.length;\n        for (uint256 i; i < participantCount; ++i) {\n            Position storage position = _positions[runId][run.participants[i]];\n            if (position.grossPayable > position.grossReceivable) {\n                position.netDebit = position.grossPayable - position.grossReceivable;\n                totalDebit += position.netDebit;\n            } else if (position.grossReceivable > position.grossPayable) {\n                position.netCredit = position.grossReceivable - position.grossPayable;\n                totalCredit += position.netCredit;\n            }\n        }\n        if (totalDebit != totalCredit) revert AccountingMismatch(totalDebit, totalCredit);\n\n        run.grossAmount = grossAmount;\n        run.totalNetDebit = totalDebit;\n        run.closedAt = uint64(block.timestamp);\n        run.state = totalDebit == 0 ? RunState.Covered : RunState.Closed;\n\n        emit RunClosed(runId, grossAmount, totalDebit);\n        if (totalDebit == 0) emit RunCovered(runId, 0);\n    }\n\n    /// @notice Funds the caller's entire finalized net debit in one transfer.\n    function fund(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Closed);\n        _requireBeforeDeadline(runId, run);\n\n        Position storage position = _positions[runId][msg.sender];\n        uint256 amount = position.netDebit;\n        if (amount == 0) revert NoFundingRequired(runId, msg.sender);\n        if (position.funded != 0) revert AlreadyFunded(runId, msg.sender);\n\n        position.funded = amount;\n        run.totalFunded += amount;\n        totalEscrowed += amount;\n\n        uint256 balanceBefore = settlementToken.balanceOf(address(this));\n        settlementToken.safeTransferFrom(msg.sender, address(this), amount);\n        uint256 received = settlementToken.balanceOf(address(this)) - balanceBefore;\n        if (received != amount) revert UnsupportedTokenTransfer(amount, received);\n\n        emit RunFunded(runId, msg.sender, amount);\n        if (run.totalFunded == run.totalNetDebit) {\n            run.state = RunState.Covered;\n            emit RunCovered(runId, run.totalFunded);\n        }\n    }\n\n    function settleRun(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Covered);\n        if (run.totalFunded != run.totalNetDebit) {\n            revert RunNotFullyFunded(runId, run.totalFunded, run.totalNetDebit);\n        }\n\n        run.state = RunState.Settled;\n        run.settledAt = uint64(block.timestamp);\n        totalEscrowed -= run.totalNetDebit;\n\n        uint256 participantCount = run.participants.length;\n        for (uint256 i; i < participantCount; ++i) {\n            address participant = run.participants[i];\n            uint256 amount = _positions[runId][participant].netCredit;\n            if (amount == 0) continue;\n            settlementToken.safeTransfer(participant, amount);\n            emit SettlementPaid(runId, participant, amount);\n        }\n\n        emit RunSettled(runId, run.totalNetDebit);\n    }\n\n    function expireRun(uint256 runId) external {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Closed);\n        if (block.timestamp < run.fundingDeadline) {\n            revert FundingDeadlineNotReached(runId, run.fundingDeadline);\n        }\n\n        run.state = RunState.Expired;\n        run.expiredAt = uint64(block.timestamp);\n        emit RunExpired(runId, run.totalFunded);\n\n        if (run.totalFunded == 0) {\n            run.state = RunState.Refunded;\n            emit RunRefunded(runId, 0);\n        }\n    }\n\n    function claimRefund(uint256 runId) external nonReentrant {\n        Run storage run = _getRun(runId);\n        _requireState(runId, run, RunState.Expired);\n\n        Position storage position = _positions[runId][msg.sender];\n        uint256 amount = position.funded - position.refunded;\n        if (amount == 0) revert NoRefundAvailable(runId, msg.sender);\n\n        position.refunded += amount;\n        run.totalRefunded += amount;\n        totalEscrowed -= amount;\n\n        if (run.totalRefunded == run.totalFunded) {\n            run.state = RunState.Refunded;\n            emit RunRefunded(runId, run.totalRefunded);\n        }\n\n        settlementToken.safeTransfer(msg.sender, amount);\n        emit DebtorRefunded(runId, msg.sender, amount);\n    }\n\n    function getRun(uint256 runId) external view returns (Run memory) {\n        Run storage run = _getRun(runId);\n        return run;\n    }\n\n    function getParticipants(uint256 runId) external view returns (address[] memory) {\n        return _getRun(runId).participants;\n    }\n\n    function getObligationIds(uint256 runId) external view returns (uint256[] memory) {\n        return _getRun(runId).obligationIds;\n    }\n\n    function getObligation(uint256 obligationId) external view returns (Obligation memory) {\n        return _getObligation(obligationId);\n    }\n\n    function getPosition(uint256 runId, address participant) external view returns (Position memory) {\n        _getRun(runId);\n        if (!isParticipant[runId][participant]) revert NotParticipant(runId, participant);\n        return _positions[runId][participant];\n    }\n\n    function requiredFunding(uint256 runId, address participant) external view returns (uint256) {\n        _getRun(runId);\n        if (!isParticipant[runId][participant]) revert NotParticipant(runId, participant);\n        Position storage position = _positions[runId][participant];\n        return position.netDebit - position.funded;\n    }\n\n    function compressionBps(uint256 runId) external view returns (uint256) {\n        Run storage run = _getRun(runId);\n        if (run.grossAmount == 0) return 0;\n        return ((run.grossAmount - run.totalNetDebit) * COMPRESSION_BPS_DENOMINATOR) / run.grossAmount;\n    }\n\n    function _getRun(uint256 runId) private view returns (Run storage run) {\n        run = _runs[runId];\n        if (run.state == RunState.None) revert RunNotFound(runId);\n    }\n\n    function _getObligation(uint256 obligationId) private view returns (Obligation storage obligation) {\n        obligation = _obligations[obligationId];\n        if (obligation.status == ObligationStatus.None) revert ObligationNotFound(obligationId);\n    }\n\n    function _requireCreator(uint256 runId, Run storage run) private view {\n        if (run.creator != msg.sender) revert NotRunCreator(runId, msg.sender);\n    }\n\n    function _requireState(uint256 runId, Run storage run, RunState expected) private view {\n        if (run.state != expected) revert InvalidRunState(runId, expected, run.state);\n    }\n\n    function _requireBeforeDeadline(uint256 runId, Run storage run) private view {\n        if (block.timestamp >= run.fundingDeadline) {\n            revert FundingDeadlineReached(runId, run.fundingDeadline);\n        }\n    }\n\n    function _requireObligationStatus(uint256 obligationId, Obligation storage obligation, ObligationStatus expected)\n        private\n        view\n    {\n        if (obligation.status != expected) {\n            revert InvalidObligationStatus(obligationId, expected, obligation.status);\n        }\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n    /*\n     * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n     * 0xb0202a11 ===\n     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^\n     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n     */\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n     * @param from The address which you want to send tokens from.\n     * @param to The address which you want to transfer to.\n     * @param value The amount of tokens to be transferred.\n     * @param data Additional data with no specified format, sent in call to `to`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     * @param data Additional data with no specified format, sent in call to `spender`.\n     * @return A boolean value indicating whether the operation succeeded unless throwing.\n     */\n    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    /**\n     * @dev An operation with an ERC-20 token failed.\n     */\n    error SafeERC20FailedOperation(address token);\n\n    /**\n     * @dev Indicates a failed `decreaseAllowance` request.\n     */\n    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n    /**\n     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     */\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n     */\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n    }\n\n    /**\n     * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n     */\n    function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n        return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n    }\n\n    /**\n     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 oldAllowance = token.allowance(address(this), spender);\n        forceApprove(token, spender, oldAllowance + value);\n    }\n\n    /**\n     * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n     * value, non-reverting calls are assumed to be successful.\n     *\n     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n     * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n     */\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n        unchecked {\n            uint256 currentAllowance = token.allowance(address(this), spender);\n            if (currentAllowance < requestedDecrease) {\n                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n            }\n            forceApprove(token, spender, currentAllowance - requestedDecrease);\n        }\n    }\n\n    /**\n     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n     * to be set to zero before setting it to a non-zero value, such as USDT.\n     *\n     * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n     * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n     * set here.\n     */\n    function forceApprove(IERC20 token, address spender, uint256 value) internal {\n        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n        if (!_callOptionalReturnBool(token, approvalCall)) {\n            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n            _callOptionalReturn(token, approvalCall);\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            safeTransfer(token, to, value);\n        } else if (!token.transferAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n     * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function transferFromAndCallRelaxed(\n        IERC1363 token,\n        address from,\n        address to,\n        uint256 value,\n        bytes memory data\n    ) internal {\n        if (to.code.length == 0) {\n            safeTransferFrom(token, from, to, value);\n        } else if (!token.transferFromAndCall(from, to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n     * targeting contracts.\n     *\n     * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n     * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n     * once without retrying, and relies on the returned value to be true.\n     *\n     * Reverts if the returned value is other than `true`.\n     */\n    function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n        if (to.code.length == 0) {\n            forceApprove(token, to, value);\n        } else if (!token.approveAndCall(to, value, data)) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            // bubble errors\n            if iszero(success) {\n                let ptr := mload(0x40)\n                returndatacopy(ptr, 0, returndatasize())\n                revert(ptr, returndatasize())\n            }\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n\n        if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n            revert SafeERC20FailedOperation(address(token));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     *\n     * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n     */\n    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n        bool success;\n        uint256 returnSize;\n        uint256 returnValue;\n        assembly (\"memory-safe\") {\n            success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n            returnSize := returndatasize()\n            returnValue := mload(0)\n        }\n        return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n    }\n}\n"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"}},"language":"Solidity","settings":{"viaIR":false,"metadata":{"appendCBOR":true,"bytecodeHash":"ipfs","useLiteralContent":false},"libraries":{},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"]}},"stdJsonOutput":{"sources":{"src/NetFoldClearing.sol":{"id":7},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"id":2},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"id":1},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"id":3},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"id":0},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"id":5},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"id":4},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"id":6}},"contracts":{"src/NetFoldClearing.sol":{"NetFoldClearing":{"abi":[{"type":"constructor","inputs":[{"name":"settlementToken_","type":"address","internalType":"contract IERC20"}],"stateMutability":"nonpayable"},{"name":"AccountingMismatch","type":"error","inputs":[{"name":"totalDebit","type":"uint256","internalType":"uint256"},{"name":"totalCredit","type":"uint256","internalType":"uint256"}]},{"name":"AlreadyFunded","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"AmountTooLarge","type":"error","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"DuplicateParticipant","type":"error","inputs":[{"name":"participant","type":"address","internalType":"address"}]},{"name":"DuplicateReferenceHash","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}]},{"name":"FundingDeadlineNotReached","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"FundingDeadlineReached","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"InvalidDeadline","type":"error","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"name":"InvalidObligationParties","type":"error","inputs":[{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"}]},{"name":"InvalidObligationStatus","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"},{"name":"expected","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"},{"name":"actual","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"}]},{"name":"InvalidParticipant","type":"error","inputs":[{"name":"participant","type":"address","internalType":"address"}]},{"name":"InvalidParticipantCount","type":"error","inputs":[{"name":"count","type":"uint256","internalType":"uint256"}]},{"name":"InvalidReferenceHash","type":"error","inputs":[]},{"name":"InvalidRunState","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"expected","type":"uint8","internalType":"enum NetFoldClearing.RunState"},{"name":"actual","type":"uint8","internalType":"enum NetFoldClearing.RunState"}]},{"name":"InvalidSettlementToken","type":"error","inputs":[]},{"name":"NoFundingRequired","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NoObligations","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"NoRefundAvailable","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NotObligationPayer","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"},{"name":"caller","type":"address","internalType":"address"}]},{"name":"NotParticipant","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"account","type":"address","internalType":"address"}]},{"name":"NotRunCreator","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"caller","type":"address","internalType":"address"}]},{"name":"ObligationNotFound","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}]},{"name":"ReentrancyGuardReentrantCall","type":"error","inputs":[]},{"name":"RunNotFound","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"RunNotFullyFunded","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"funded","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint256","internalType":"uint256"}]},{"name":"SafeERC20FailedOperation","type":"error","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"name":"TooManyObligations","type":"error","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}]},{"name":"UnacceptedObligation","type":"error","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}]},{"name":"UnsupportedTokenTransfer","type":"error","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"received","type":"uint256","internalType":"uint256"}]},{"name":"ZeroAmount","type":"error","inputs":[]},{"name":"DebtorRefunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ObligationAccepted","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"ObligationCancelled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ObligationProposed","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"obligationId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":true,"internalType":"address"},{"name":"payee","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"referenceHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"name":"RunCancelled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"RunClosed","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"grossAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"totalNetDebit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunCovered","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalFunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunCreated","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"creator","type":"address","indexed":true,"internalType":"address"},{"name":"fundingDeadline","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"participants","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"name":"RunExpired","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalFunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunFunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"debtor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunRefunded","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalRefunded","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RunSettled","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"totalSettled","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"SettlementPaid","type":"event","inputs":[{"name":"runId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"creditor","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"COMPRESSION_BPS_DENOMINATOR","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_OBLIGATIONS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_OBLIGATION_AMOUNT","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PARTICIPANTS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"acceptObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"cancelRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"claimRefund","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"closeRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"compressionBps","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"createRun","type":"function","inputs":[{"name":"participants","type":"address[]","internalType":"address[]"},{"name":"fundingDeadline","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"expireRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"fund","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"getObligation","type":"function","inputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"},{"name":"status","type":"uint8","internalType":"enum NetFoldClearing.ObligationStatus"},{"name":"createdAt","type":"uint64","internalType":"uint64"},{"name":"acceptedAt","type":"uint64","internalType":"uint64"}],"internalType":"struct NetFoldClearing.Obligation"}],"stateMutability":"view"},{"name":"getObligationIds","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"name":"getParticipants","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"name":"getPosition","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"grossPayable","type":"uint256","internalType":"uint256"},{"name":"grossReceivable","type":"uint256","internalType":"uint256"},{"name":"netDebit","type":"uint256","internalType":"uint256"},{"name":"netCredit","type":"uint256","internalType":"uint256"},{"name":"funded","type":"uint256","internalType":"uint256"},{"name":"refunded","type":"uint256","internalType":"uint256"}],"internalType":"struct NetFoldClearing.Position"}],"stateMutability":"view"},{"name":"getRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"creator","type":"address","internalType":"address"},{"name":"state","type":"uint8","internalType":"enum NetFoldClearing.RunState"},{"name":"fundingDeadline","type":"uint64","internalType":"uint64"},{"name":"createdAt","type":"uint64","internalType":"uint64"},{"name":"closedAt","type":"uint64","internalType":"uint64"},{"name":"settledAt","type":"uint64","internalType":"uint64"},{"name":"expiredAt","type":"uint64","internalType":"uint64"},{"name":"grossAmount","type":"uint256","internalType":"uint256"},{"name":"totalNetDebit","type":"uint256","internalType":"uint256"},{"name":"totalFunded","type":"uint256","internalType":"uint256"},{"name":"totalRefunded","type":"uint256","internalType":"uint256"},{"name":"participants","type":"address[]","internalType":"address[]"},{"name":"obligationIds","type":"uint256[]","internalType":"uint256[]"}],"internalType":"struct NetFoldClearing.Run"}],"stateMutability":"view"},{"name":"isParticipant","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"included","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"nextObligationId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"nextRunId","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"proposeObligation","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"payer","type":"address","internalType":"address"},{"name":"payee","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"obligationId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"requiredFunding","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"participant","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"settleRun","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"settlementToken","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"name":"totalEscrowed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"usedReferenceHash","type":"function","inputs":[{"name":"runId","type":"uint256","internalType":"uint256"},{"name":"referenceHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"used","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"metadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"settlementToken_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalDebit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCredit\",\"type\":\"uint256\"}],\"name\":\"AccountingMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AlreadyFunded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AmountTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"DuplicateParticipant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"referenceHash\",\"type\":\"bytes32\"}],\"name\":\"DuplicateReferenceHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"FundingDeadlineNotReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"FundingDeadlineReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"InvalidDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"InvalidObligationParties\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"},{\"internalType\":\"enum NetFoldClearing.ObligationStatus\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"enum NetFoldClearing.ObligationStatus\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidObligationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"InvalidParticipant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"InvalidParticipantCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReferenceHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"enum NetFoldClearing.RunState\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"enum NetFoldClearing.RunState\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidRunState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSettlementToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NoFundingRequired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"NoObligations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NoRefundAvailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"NotObligationPayer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NotParticipant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"NotRunCreator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"ObligationNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"RunNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"funded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"RunNotFullyFunded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"TooManyObligations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"UnacceptedObligation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"UnsupportedTokenTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DebtorRefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"}],\"name\":\"ObligationAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"ObligationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"referenceHash\",\"type\":\"bytes32\"}],\"name\":\"ObligationProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"RunCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalNetDebit\",\"type\":\"uint256\"}],\"name\":\"RunClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalFunded\",\"type\":\"uint256\"}],\"name\":\"RunCovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"fundingDeadline\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"}],\"name\":\"RunCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalFunded\",\"type\":\"uint256\"}],\"name\":\"RunExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RunFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalRefunded\",\"type\":\"uint256\"}],\"name\":\"RunRefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSettled\",\"type\":\"uint256\"}],\"name\":\"RunSettled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SettlementPaid\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMPRESSION_BPS_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_OBLIGATIONS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_OBLIGATION_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PARTICIPANTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"acceptObligation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"cancelObligation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"cancelRun\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"closeRun\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"compressionBps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"uint64\",\"name\":\"fundingDeadline\",\"type\":\"uint64\"}],\"name\":\"createRun\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"expireRun\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"fund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"name\":\"getObligation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"referenceHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum NetFoldClearing.ObligationStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"acceptedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct NetFoldClearing.Obligation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"getObligationIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"getParticipants\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"getPosition\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"grossPayable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"grossReceivable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"netDebit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"netCredit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"funded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"refunded\",\"type\":\"uint256\"}],\"internalType\":\"struct NetFoldClearing.Position\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"getRun\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"enum NetFoldClearing.RunState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"fundingDeadline\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"closedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"settledAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expiredAt\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"grossAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalNetDebit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalFunded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalRefunded\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"participants\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"obligationIds\",\"type\":\"uint256[]\"}],\"internalType\":\"struct NetFoldClearing.Run\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"isParticipant\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"included\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextObligationId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextRunId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"referenceHash\",\"type\":\"bytes32\"}],\"name\":\"proposeObligation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"obligationId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"requiredFunding\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"}],\"name\":\"settleRun\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"settlementToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalEscrowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"runId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"referenceHash\",\"type\":\"bytes32\"}],\"name\":\"usedReferenceHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"used\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"NetFoldClearing\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"fund(uint256)\":{\"notice\":\"Funds the caller's entire finalized net debit in one transfer.\"}},\"notice\":\"Bounded, covered multilateral obligation netting for one immutable ERC-20 token.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/NetFoldClearing.sol\":\"NetFoldClearing\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"src/NetFoldClearing.sol\":{\"keccak256\":\"0x3888f1c87c25e8a1ce164275a0f10d3a63d791ced75110b8033e4ca178fc3493\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1309b9f25f5982e061df5bb26a131b57ac84496c4307e176ef89786ca10fa4e\",\"dweb:/ipfs/QmQKCnPThUghqNUELTjoi6LJDEdeZ7GpAMg5ALL1GFss1H\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"Bounded, covered multilateral obligation netting for one immutable ERC-20 token.","methods":{"fund(uint256)":{"notice":"Funds the caller's entire finalized net debit in one transfer."}},"version":1},"devdoc":{"kind":"dev","title":"NetFoldClearing","errors":{"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"SafeERC20FailedOperation(address)":[{"details":"An operation with an ERC-20 token failed."}]},"methods":{},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_uint64":{"label":"uint64","encoding":"inplace","numberOfBytes":"8"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_enum(RunState)752":{"label":"enum NetFoldClearing.RunState","encoding":"inplace","numberOfBytes":"1"},"t_struct(Run)787_storage":{"label":"struct NetFoldClearing.Run","members":[{"slot":"0","type":"t_address","astId":759,"label":"creator","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"0","type":"t_enum(RunState)752","astId":762,"label":"state","offset":20,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"0","type":"t_uint64","astId":764,"label":"fundingDeadline","offset":21,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":766,"label":"createdAt","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":768,"label":"closedAt","offset":8,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":770,"label":"settledAt","offset":16,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint64","astId":772,"label":"expiredAt","offset":24,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":774,"label":"grossAmount","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":776,"label":"totalNetDebit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_uint256","astId":778,"label":"totalFunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint256","astId":780,"label":"totalRefunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"6","type":"t_array(t_address)dyn_storage","astId":783,"label":"participants","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"7","type":"t_array(t_uint256)dyn_storage","astId":786,"label":"obligationIds","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"256"},"t_enum(ObligationStatus)757":{"label":"enum NetFoldClearing.ObligationStatus","encoding":"inplace","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"key":"t_address","label":"mapping(address => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"key":"t_bytes32","label":"mapping(bytes32 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_array(t_address)dyn_storage":{"base":"t_address","label":"address[]","encoding":"dynamic_array","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","label":"uint256[]","encoding":"dynamic_array","numberOfBytes":"32"},"t_struct(Position)818_storage":{"label":"struct NetFoldClearing.Position","members":[{"slot":"0","type":"t_uint256","astId":807,"label":"grossPayable","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint256","astId":809,"label":"grossReceivable","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":811,"label":"netDebit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":813,"label":"netCredit","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_uint256","astId":815,"label":"funded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint256","astId":817,"label":"refunded","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"192"},"t_struct(Obligation)805_storage":{"label":"struct NetFoldClearing.Obligation","members":[{"slot":"0","type":"t_uint256","astId":789,"label":"runId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_address","astId":791,"label":"payer","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_address","astId":793,"label":"payee","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":795,"label":"amount","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_bytes32","astId":797,"label":"referenceHash","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_enum(ObligationStatus)757","astId":800,"label":"status","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint64","astId":802,"label":"createdAt","offset":1,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_uint64","astId":804,"label":"acceptedAt","offset":9,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}],"encoding":"inplace","numberOfBytes":"192"},"t_mapping(t_uint256,t_struct(Run)787_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct NetFoldClearing.Run)","value":"t_struct(Run)787_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_address,t_bool))":{"key":"t_uint256","label":"mapping(uint256 => mapping(address => bool))","value":"t_mapping(t_address,t_bool)","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_bool))":{"key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => bool))","value":"t_mapping(t_bytes32,t_bool)","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_struct(Position)818_storage)":{"key":"t_address","label":"mapping(address => struct NetFoldClearing.Position)","value":"t_struct(Position)818_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_struct(Obligation)805_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct NetFoldClearing.Obligation)","value":"t_struct(Obligation)805_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(Position)818_storage))":{"key":"t_uint256","label":"mapping(uint256 => mapping(address => struct NetFoldClearing.Position))","value":"t_mapping(t_address,t_struct(Position)818_storage)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_uint256","astId":642,"label":"_status","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"1","type":"t_uint256","astId":1069,"label":"nextRunId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"2","type":"t_uint256","astId":1072,"label":"nextObligationId","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"3","type":"t_uint256","astId":1074,"label":"totalEscrowed","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"4","type":"t_mapping(t_uint256,t_struct(Run)787_storage)","astId":1079,"label":"_runs","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"5","type":"t_mapping(t_uint256,t_struct(Obligation)805_storage)","astId":1084,"label":"_obligations","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"6","type":"t_mapping(t_uint256,t_mapping(t_address,t_bool))","astId":1090,"label":"isParticipant","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"7","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(Position)818_storage))","astId":1097,"label":"_positions","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"},{"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_bool))","astId":1103,"label":"usedReferenceHash","offset":0,"contract":"src/NetFoldClearing.sol:NetFoldClearing"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"60a060405260018055600160025534801562000019575f80fd5b5060405162002782380380620027828339810160408190526200003c9162000090565b60015f556001600160a01b03811615806200005f57506001600160a01b0381163b155b156200007e57604051630a790f9560e41b815260040160405180910390fd5b6001600160a01b0316608052620000bf565b5f60208284031215620000a1575f80fd5b81516001600160a01b0381168114620000b8575f80fd5b9392505050565b608051612687620000fb5f395f81816102c401528181610c7801528181610f5b015281816118e40152818161196401526119ad01526126875ff3fe608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","sourceMap":"415:17722:7:-:0;;;4696:1;4669:28;;4737:1;4703:35;;5212:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1857:1:5;2061:7;:21;-1:-1:-1;;;;;5263:39:7;;;;:85;;-1:-1:-1;;;;;;5306:37:7;;;:42;5263:85;5259:147;;;5371:24;;-1:-1:-1;;;5371:24:7;;;;;;;;;;;5259:147;-1:-1:-1;;;;;5415:34:7;;;415:17722;;14:304:8;98:6;151:2;139:9;130:7;126:23;122:32;119:52;;;167:1;164;157:12;119:52;193:16;;-1:-1:-1;;;;;238:31:8;;228:42;;218:70;;284:1;281;274:12;218:70;307:5;14:304;-1:-1:-1;;;14:304:8:o;:::-;415:17722:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561000f575f80fd5b50600436106101a0575f3560e01c80638c7167f9116100f3578063cd2d944f11610093578063ee6a51ef1161006e578063ee6a51ef1461042f578063f3baf07014610442578063f91682311461044a578063fb95adff14610453575f80fd5b8063cd2d944f146103a8578063d29f541d146103b1578063edd4050a1461040f575f80fd5b80639fa050c7116100ce5780639fa050c71461035a578063afe1c9aa1461036d578063c1e3bd3e14610375578063ca1d209d14610395575f80fd5b80638c7167f91461032b5780638f0b84551461033457806398d7993c14610347575f80fd5b80632e9c076c1161015e578063733f320d11610139578063733f320d1461026f578063758d9b89146102825780637b9e618d146102bf57806383b8f8f1146102fe575f80fd5b80632e9c076c146102295780635abae4f31461023c5780635b7baf641461025c575f80fd5b8062c3a54d146101a45780630a575bda146101c55780630f065ef6146101d8578063236d50b2146101ed5780632447e4ac1461020d5780632e9b3cb014610216575b5f80fd5b6101b26001600160801b0381565b6040519081526020015b60405180910390f35b6101b26101d33660046120e5565b610466565b6101eb6101e63660046120e5565b6104b9565b005b6102006101fb3660046120e5565b610875565b6040516101bc9190612196565b6101b260025481565b6101eb6102243660046122a6565b610aa1565b6101eb6102373660046120e5565b610b4b565b61024f61024a3660046120e5565b610d3b565b6040516101bc91906122d6565b6101eb61026a3660046120e5565b610e2f565b6101eb61027d3660046120e5565b610fc5565b6102af61029036600461236a565b600660209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016101bc565b6102e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b6102af61030c3660046122a6565b600860209081525f928352604080842090915290825290205460ff1681565b6101b261271081565b6101eb6103423660046120e5565b6110ed565b6101b2610355366004612394565b61114e565b6101b2610368366004612418565b611395565b6101b2602081565b6103886103833660046120e5565b61178a565b6040516101bc9190612462565b6101eb6103a33660046120e5565b6117f6565b6101b260015481565b6103c46103bf36600461236a565b611aec565b6040516101bc91905f60c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b61042261041d3660046120e5565b611bea565b6040516101bc91906124ae565b6101eb61043d3660046122a6565b611c4b565b6101b2600881565b6101b260035481565b6101b261046136600461236a565b611d46565b5f8061047183611de2565b905080600201545f0361048657505f92915050565b600281015460038201546127109061049e90836124f9565b6104a8919061250c565b6104b29190612523565b9392505050565b5f6104c382611de2565b90506104cf8282611e33565b6104db82826001611e66565b6104e58282611ec9565b60078101545f819003610513576040516322ce9ebb60e01b8152600481018490526024015b60405180910390fd5b5f805f5b8381101561065e575f85600701828154811061053557610535612542565b5f918252602080832090910154808352600590915260409091209091506003600582015460ff16600381111561056d5761056d6120fc565b03610579575050610656565b6002600582015460ff166003811115610594576105946120fc565b146105b557604051631ca9769160e21b81526004810183905260240161050a565b6105be84612556565b93508060030154856105d0919061256e565b60038201545f8a815260076020908152604080832060018701546001600160a01b0316845290915281208054939850919261060c90849061256e565b909155505060038101545f89815260076020908152604080832060028601546001600160a01b031684529091528120600101805490919061064e90849061256e565b909155505050505b600101610517565b50805f03610682576040516322ce9ebb60e01b81526004810186905260240161050a565b60068401545f908190815b81811015610752575f89815260076020526040812060068a018054839190859081106106bb576106bb612542565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060018101548154919250101561071757600181015481546106ff91906124f9565b60028201819055610710908661256e565b9450610749565b805460018201541115610749578054600182015461073591906124f9565b60038201819055610746908561256e565b93505b5060010161068d565b5081831461077d5760405163c11437df60e01b8152600481018490526024810183905260440161050a565b60028701859055600387018390556001870180546fffffffffffffffff00000000000000001916600160401b426001600160401b03160217905582156107c45760026107c7565b60035b8754889060ff60a01b1916600160a01b8360078111156107e9576107e96120fc565b0217905550604080518681526020810185905289917f4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e910160405180910390a2825f0361086b57877f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef5f60405161086291815260200190565b60405180910390a25b5050505050505050565b610904604080516101a081019091525f808252602082019081526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81526020015f81526020015f81526020015f815260200160608152602001606081525090565b5f61090e83611de2565b604080516101a0810190915281546001600160a01b03811682529192509082906020830190600160a01b900460ff16600781111561094e5761094e6120fc565b600781111561095f5761095f6120fc565b815281546001600160401b03600160a81b90910481166020808401919091526001840154808316604080860191909152600160401b820484166060860152600160801b820484166080860152600160c01b90910490921660a0840152600284015460c0840152600384015460e084015260048401546101008401526005840154610120840152600684018054835181840281018401909452808452610140909401939091830182828015610a3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610a1c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610a9057602002820191905f5260205f20905b815481526020019060010190808311610a7c575b505050505081525050915050919050565b5f610aab83611de2565b9050610ab78382611e33565b610ac383826001611e66565b610acd8382611ec9565b5f610ad783611f15565b80549091508414610afe5760405163d2b5af0160e01b81526004810184905260240161050a565b610b0a83826001611f5d565b60058101805460ff19166003179055604051839085907f3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934905f90a350505050565b610b53611fb3565b5f610b5d82611de2565b9050610b6b82826003611e66565b8060030154816004015414610bad576004808201546003830154604051631a56c46960e01b81529283018590526024830191909152604482015260640161050a565b805460ff60a01b1916600160a21b17815560018101805467ffffffffffffffff60801b1916600160801b426001600160401b03160217905560038082015481549091905f90610bfd9084906124f9565b909155505060068101545f5b81811015610cee575f836006018281548110610c2757610c27612542565b5f9182526020808320909101548783526007825260408084206001600160a01b03909216808552919092529082206003015490925090819003610c6b575050610ce6565b610c9f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611fdb565b816001600160a01b0316867f376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe4083604051610cdb91815260200190565b60405180910390a350505b600101610c09565b50827fa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c68360030154604051610d2591815260200190565b60405180910390a25050610d3860015f55565b50565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152610d8482611f15565b60408051610100810182528254815260018301546001600160a01b03908116602083015260028401541691810191909152600380830154606083015260048301546080830152600583015491929160a084019160ff90911690811115610dec57610dec6120fc565b6003811115610dfd57610dfd6120fc565b8152600591909101546001600160401b03610100820481166020840152600160481b9091041660409091015292915050565b610e37611fb3565b5f610e4182611de2565b9050610e4f82826005611e66565b5f828152600760209081526040808320338452909152812060058101546004820154919291610e7e91906124f9565b9050805f03610ea9576040516355e3fc1760e01b81526004810185905233602482015260440161050a565b80826005015f828254610ebc919061256e565b9250508190555080836005015f828254610ed6919061256e565b925050819055508060035f828254610eee91906124f9565b90915550506004830154600584015403610f4e57825460ff60a01b1916600360a11b178355600583015460405190815284907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b610f826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fdb565b604051818152339085907fc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e52489060200160405180910390a3505050610d3860015f55565b5f610fcf82611de2565b9050610fdd82826002611e66565b8054600160a81b90046001600160401b031642101561102a5780546040516353771c9160e01b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b805460ff60a01b1916600560a01b1781556001810180546001600160c01b0316600160c01b426001600160401b0316021790556004810154604080519182525183917fb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba919081900360200190a280600401545f036110e957805460ff60a01b1916600360a11b1781556040515f815282907fcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c20097689060200160405180910390a25b5050565b5f6110f782611de2565b90506111038282611e33565b61110f82826001611e66565b805460ff60a01b1916600760a01b17815560405182907feade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230905f90a25050565b5f82600281108061115f5750600881115b1561118057604051636297c9b760e01b81526004810182905260240161050a565b42836001600160401b0316116111b4576040516309decb5d60e21b81526001600160401b038416600482015260240161050a565b60018054905f6111c383612556565b909155505f81815260046020526040812080543360ff60a01b19166001600160a81b031990911617600160a01b1767ffffffffffffffff60a81b1916600160a81b6001600160401b038881169190910291909117825560018201805467ffffffffffffffff1916429092169190911790559193505b82811015611345575f87878381811061125357611253612542565b90506020020160208101906112689190612581565b90506001600160a01b03811661129c57604051631629eb8160e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602090815260408083206001600160a01b038516845290915290205460ff16156112ea57604051635a9b36c960e11b81526001600160a01b038216600482015260240161050a565b5f8581526006602081815260408084206001600160a01b039095168085529482528320805460ff1916600190811790915591860180548084018255908452922090910180546001600160a01b03191690921790915501611238565b50336001600160a01b0316837f7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df8689896040516113849392919061259a565b60405180910390a350509392505050565b5f806113a087611de2565b90506113ac8782611e33565b6113b887826001611e66565b6113c28782611ec9565b60078101546020116113ea57604051632f59b7a160e11b81526004810188905260240161050a565b5f8781526006602090815260408083206001600160a01b038a16845290915290205460ff1661143e57604051633e50052d60e21b8152600481018890526001600160a01b038716602482015260440161050a565b5f8781526006602090815260408083206001600160a01b038916845290915290205460ff1661149257604051633e50052d60e21b8152600481018890526001600160a01b038616602482015260440161050a565b846001600160a01b0316866001600160a01b0316036114d7576040516316b36ae360e21b81526001600160a01b0380881660048301528616602482015260440161050a565b835f036114f757604051631f2a200560e01b815260040160405180910390fd5b6001600160801b03841115611522576040516304041d9560e11b81526004810185905260240161050a565b826115405760405163f3d5f68960e01b815260040160405180910390fd5b5f87815260086020908152604080832086845290915290205460ff1615611584576040516332f99d7d60e11b8152600481018890526024810184905260440161050a565b60028054905f61159383612556565b919050559150604051806101000160405280888152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001600160038111156115e8576115e86120fc565b81526001600160401b0342166020808301919091525f60409283018190528581526005808352908390208451815591840151600180840180546001600160a01b039384166001600160a01b0319918216179091559486015160028501805491909316951694909417905560608401516003808401919091556080850151600484015560a0850151918301805493949293909260ff19909116918490811115611692576116926120fc565b021790555060c0820151600591909101805460e0909301516001600160401b03908116600160481b0270ffffffffffffffff0000000000000000001991909316610100021670ffffffffffffffffffffffffffffffff0019909316929092171790555f8781526008602090815260408083208684528252808320805460ff19166001908117909155600785018054918201815584529282902090920184905581516001600160a01b038881168252918101879052918201859052871690839089907f7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e7019060600160405180910390a45095945050505050565b606061179582611de2565b6006018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116117cc575b50505050509050919050565b6117fe611fb3565b5f61180882611de2565b905061181682826002611e66565b6118208282611ec9565b5f82815260076020908152604080832033845290915281206002810154909181900361186857604051637b144b2960e11b81526004810185905233602482015260440161050a565b6004820154156118945760405163bb35586d60e01b81526004810185905233602482015260440161050a565b80826004018190555080836004015f8282546118b0919061256e565b925050819055508060035f8282546118c8919061256e565b90915550506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906125f8565b905061198c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203a565b6040516370a0823160e01b81523060048201525f9082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1691906125f8565b611a2091906124f9565b9050828114611a4c576040516316602a7760e01b8152600481018490526024810182905260440161050a565b604051838152339087907f6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c799060200160405180910390a38460030154856004015403611ade57845460ff60a01b1916600360a01b178555600485015460405190815286907f7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef9060200160405180910390a25b5050505050610d3860015f55565b611b1f6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611b2883611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611b7d57604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b505f8281526007602090815260408083206001600160a01b0385168452825291829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a08201525b92915050565b6060611bf582611de2565b6007018054806020026020016040519081016040528092919081815260200182805480156117ea57602002820191905f5260205f20905b815481526020019060010190808311611c2c5750505050509050919050565b5f611c5583611de2565b9050611c6383826001611e66565b611c6d8382611ec9565b5f611c7783611f15565b80549091508414611c9e5760405163d2b5af0160e01b81526004810184905260240161050a565b60018101546001600160a01b03163314611cd457604051634261e2eb60e01b81526004810184905233602482015260440161050a565b611ce083826001611f5d565b6005810180546001600160401b034216600160481b0270ffffffffffffffff0000000000000000ff199091161760021790556040513390849086907fc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26905f90a450505050565b5f611d5083611de2565b505f8381526006602090815260408083206001600160a01b038616845290915290205460ff16611da557604051633e50052d60e21b8152600481018490526001600160a01b038316602482015260440161050a565b5f8381526007602090815260408083206001600160a01b0386168452909152902060048101546002820154611dda91906124f9565b949350505050565b5f818152600460205260408120908154600160a01b900460ff166007811115611e0d57611e0d6120fc565b03611e2e5760405163087c16d360e11b81526004810183905260240161050a565b919050565b80546001600160a01b031633146110e957604051637c94ca8160e01b81526004810183905233602482015260440161050a565b806007811115611e7857611e786120fc565b8254600160a01b900460ff166007811115611e9557611e956120fc565b14611ec45781546040516304e0fd0760e51b815261050a9185918491600160a01b900460ff169060040161260f565b505050565b8054600160a81b90046001600160401b031642106110e9578054604051634522a46960e11b815260048101849052600160a81b9091046001600160401b0316602482015260440161050a565b5f81815260056020526040812090600582015460ff166003811115611f3c57611f3c6120fc565b03611e2e5760405163d2b5af0160e01b81526004810183905260240161050a565b806003811115611f6f57611f6f6120fc565b600583015460ff166003811115611f8857611f886120fc565b14611ec457600582015460405163b4d94c6560e01b815261050a918591849160ff1690600401612630565b60025f5403611fd557604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6040516001600160a01b03838116602483015260448201839052611ec491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612079565b6040516001600160a01b0384811660248301528381166044830152606482018390526120739186918216906323b872dd90608401612008565b50505050565b5f8060205f8451602086015f885af180612098576040513d5f823e3d81fd5b50505f513d915081156120af5780600114156120bc565b6001600160a01b0384163b155b1561207357604051635274afe760e01b81526001600160a01b038516600482015260240161050a565b5f602082840312156120f5575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60088110612120576121206120fc565b9052565b5f815180845260208085019450602084015f5b8381101561215c5781516001600160a01b031687529582019590820190600101612137565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561215c5781518752958201959082019060010161217a565b602081526121b06020820183516001600160a01b03169052565b5f60208301516121c36040840182612110565b5060408301516001600160401b03811660608401525060608301516001600160401b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160401b03811660c08401525060c08301516001600160401b03811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160808401919091528301516101a06101808085018290526122806101c0860184612124565b90860151858203601f19018387015290925061229c8382612167565b9695505050505050565b5f80604083850312156122b7575f80fd5b50508035926020909101359150565b60048110612120576121206120fc565b5f6101008201905082518252602083015160018060a01b0380821660208501528060408601511660408501525050606083015160608301526080830151608083015260a083015161232a60a08401826122c6565b5060c08301516001600160401b0380821660c08501528060e08601511660e0850152505092915050565b80356001600160a01b0381168114611e2e575f80fd5b5f806040838503121561237b575f80fd5b8235915061238b60208401612354565b90509250929050565b5f805f604084860312156123a6575f80fd5b83356001600160401b03808211156123bc575f80fd5b818601915086601f8301126123cf575f80fd5b8135818111156123dd575f80fd5b8760208260051b85010111156123f1575f80fd5b6020928301955093509085013590808216821461240c575f80fd5b50809150509250925092565b5f805f805f60a0868803121561242c575f80fd5b8535945061243c60208701612354565b935061244a60408701612354565b94979396509394606081013594506080013592915050565b602080825282518282018190525f9190848201906040850190845b818110156124a25783516001600160a01b03168352928401929184019160010161247d565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b818110156124a2578351835292840192918401916001016124c9565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611be457611be46124e5565b8082028115828204841417611be457611be46124e5565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612567576125676124e5565b5060010190565b80820180821115611be457611be46124e5565b5f60208284031215612591575f80fd5b6104b282612354565b6001600160401b0384168152604060208083018290529082018390525f90849060608401835b868110156125ec576001600160a01b036125d985612354565b16825292820192908201906001016125c0565b50979650505050505050565b5f60208284031215612608575f80fd5b5051919050565b838152606081016126236020830185612110565b611dda6040830184612110565b8381526060810161264460208301856122c6565b611dda60408301846122c656fea26469706673582212205dcc1905a6ca2f849c82917f93c307075cbfa3f7e7b7525a6719543c68d25e7164736f6c63430008180033","sourceMap":"415:17722:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;598:65;;-1:-1:-1;;;;;598:65:7;;;;;160:25:8;;;148:2;133:18;598:65:7;;;;;;;;16553:268;;;;;;:::i;:::-;;:::i;9753:2238::-;;;;;;:::i;:::-;;:::i;:::-;;15376:135;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4703:35::-;;;;;;8887:601;;;;;;:::i;:::-;;:::i;13167:898::-;;;;;;:::i;:::-;;:::i;15795:139::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14625:745::-;;;;;;:::i;:::-;;:::i;14071:548::-;;;;;;:::i;:::-;;:::i;4913:92::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5526:14:8;;5519:22;5501:41;;5489:2;5474:18;4913:92:7;5361:187:8;4624:39:7;;;;;;;;-1:-1:-1;;;;;5731:32:8;;;5713:51;;5701:2;5686:18;4624:39:7;5553:217:8;5111:94:7;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;669:60;;723:6;669:60;;9494:253;;;;;;:::i;:::-;;:::i;5462:1112::-;;;;;;:::i;:::-;;:::i;6580:1567::-;;;;;;:::i;:::-;;:::i;548:44::-;;590:2;548:44;;15517:132;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12076:1085::-;;;;;;:::i;:::-;;:::i;4669:28::-;;;;;;15940:266;;;;;;:::i;:::-;;:::i;:::-;;;;;;8086:4:8;8128:3;8117:9;8113:19;8105:27;;8165:6;8159:13;8148:9;8141:32;8229:4;8221:6;8217:17;8211:24;8204:4;8193:9;8189:20;8182:54;8292:4;8284:6;8280:17;8274:24;8267:4;8256:9;8252:20;8245:54;8355:4;8347:6;8343:17;8337:24;8330:4;8319:9;8315:20;8308:54;8418:4;8410:6;8406:17;8400:24;8393:4;8382:9;8378:20;8371:54;8481:4;8473:6;8469:17;8463:24;8456:4;8445:9;8441:20;8434:54;7944:550;;;;;15655:134:7;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8153:728::-;;;;;;:::i;:::-;;:::i;498:44::-;;541:1;498:44;;4744:28;;;;;;16212:335;;;;;;:::i;:::-;;:::i;16553:268::-;16615:7;16634:15;16652:14;16660:5;16652:7;:14::i;:::-;16634:32;;16680:3;:15;;;16699:1;16680:20;16676:34;;-1:-1:-1;16709:1:7;;16553:268;-1:-1:-1;;16553:268:7:o;16676:34::-;16799:15;;;;16747:17;;;;723:6;;16729:35;;16799:15;16729:35;:::i;:::-;16728:67;;;;:::i;:::-;16727:87;;;;:::i;:::-;16720:94;16553:268;-1:-1:-1;;;16553:268:7:o;9753:2238::-;9805:15;9823:14;9831:5;9823:7;:14::i;:::-;9805:32;;9847:27;9863:5;9870:3;9847:15;:27::i;:::-;9884:40;9898:5;9905:3;9910:13;9884;:40::i;:::-;9934:34;9957:5;9964:3;9934:22;:34::i;:::-;10005:17;;;:24;9979:23;10043:20;;;10039:53;;10072:20;;-1:-1:-1;;;10072:20:7;;;;;160:25:8;;;133:18;;10072:20:7;;;;;;;;10039:53;10103:19;10132:29;10176:9;10171:648;10191:15;10187:1;:19;10171:648;;;10227:20;10250:3;:17;;10268:1;10250:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;10316:26;;;:12;:26;;;;;;;10250:20;;-1:-1:-1;10381:26:7;10360:17;;;;;;:47;;;;;;;;:::i;:::-;;10356:61;;10409:8;;;;10356:61;10456:25;10435:17;;;;;;:46;;;;;;;;:::i;:::-;;10431:126;;10508:34;;-1:-1:-1;;;10508:34:7;;;;;160:25:8;;;133:18;;10508:34:7;14:177:8;10431:126:7;10570:23;;;:::i;:::-;;;10622:10;:17;;;10607:32;;;;;:::i;:::-;10705:17;;;;10653;;;;:10;:17;;;;;;;;10671:16;;;;-1:-1:-1;;;;;10671:16:7;10653:35;;;;;;;:69;;10607:32;;-1:-1:-1;10705:17:7;;10653:69;;10705:17;;10653:69;:::i;:::-;;;;-1:-1:-1;;10791:17:7;;;;10736;;;;:10;:17;;;;;;;;10754:16;;;;-1:-1:-1;;;;;10754:16:7;10736:35;;;;;;;10754:16;10736:51;:72;;:51;;:17;:72;;10791:17;;10736:72;:::i;:::-;;;;-1:-1:-1;;;;10171:648:7;10208:3;;10171:648;;;;10832:21;10857:1;10832:26;10828:59;;10867:20;;-1:-1:-1;;;10867:20:7;;;;;160:25:8;;;133:18;;10867:20:7;14:177:8;10828:59:7;10982:16;;;:23;10898:18;;;;;11015:564;11035:16;11031:1;:20;11015:564;;;11072:25;11100:17;;;:10;:17;;;;;11118:16;;;:19;;11072:25;;11118:16;11135:1;;11118:19;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;11118:19:7;11100:38;;;;;;;;;;;;11118:19;11180:24;;;11156:21;;11100:38;;-1:-1:-1;;11152:417:7;;;11268:24;;;;11244:21;;:48;;11268:24;11244:48;:::i;:::-;11224:17;;;:68;;;11310:31;;;;:::i;:::-;;;11152:417;;;11393:21;;11366:24;;;;:48;11362:207;;;11482:21;;11455:24;;;;:48;;11482:21;11455:48;:::i;:::-;11434:18;;;:69;;;11521:33;;;;:::i;:::-;;;11362:207;-1:-1:-1;11053:3:7;;11015:564;;;;11606:11;11592:10;:25;11588:81;;11626:43;;-1:-1:-1;;;11626:43:7;;;;;10372:25:8;;;10413:18;;;10406:34;;;10345:18;;11626:43:7;10198:248:8;11588:81:7;11680:15;;;:29;;;11719:17;;;:30;;;11759:12;;;:38;;-1:-1:-1;;11759:38:7;-1:-1:-1;;;11781:15:7;-1:-1:-1;;;;;11759:38:7;;;;;11819:15;;:52;;11856:15;11819:52;;;11837:16;11819:52;11807:64;;:3;;-1:-1:-1;;;;11807:64:7;-1:-1:-1;;;11807:64:7;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;11887:41:7;;;10372:25:8;;;10428:2;10413:18;;10406:34;;;11897:5:7;;11887:41;;10345:18:8;11887:41:7;;;;;;;11942:10;11956:1;11942:15;11938:46;;11975:5;11964:20;11982:1;11964:20;;;;160:25:8;;148:2;133:18;;14:177;11964:20:7;;;;;;;;11938:46;9795:2196;;;;;;;9753:2238;:::o;15376:135::-;15430:10;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15430:10:7;15452:15;15470:14;15478:5;15470:7;:14::i;:::-;15494:10;;;;;;;;;;;-1:-1:-1;;;;;15494:10:7;;;;;;-1:-1:-1;15494:10:7;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;-1:-1:-1;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15494:10:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15376:135;;;:::o;8887:601::-;8969:15;8987:14;8995:5;8987:7;:14::i;:::-;8969:32;;9011:27;9027:5;9034:3;9011:15;:27::i;:::-;9048:40;9062:5;9069:3;9074:13;9048;:40::i;:::-;9098:34;9121:5;9128:3;9098:22;:34::i;:::-;9143:29;9175:28;9190:12;9175:14;:28::i;:::-;9217:16;;9143:60;;-1:-1:-1;9217:25:7;;9213:70;;9251:32;;-1:-1:-1;;;9251:32:7;;;;;160:25:8;;;133:18;;9251:32:7;14:177:8;9213:70:7;9293:76;9318:12;9332:10;9344:24;9293;:76::i;:::-;9380:17;;;:46;;-1:-1:-1;;9380:46:7;9400:26;9380:46;;;9441:40;;9468:12;;9461:5;;9441:40;;-1:-1:-1;;9441:40:7;8959:529;;8887:601;;:::o;13167:898::-;2500:21:5;:19;:21::i;:::-;13233:15:7::1;13251:14;13259:5;13251:7;:14::i;:::-;13233:32;;13275:43;13289:5;13296:3;13301:16;13275:13;:43::i;:::-;13351:3;:17;;;13332:3;:15;;;:36;13328:134;;13416:15;::::0;;::::1;::::0;13433:17:::1;::::0;::::1;::::0;13391:60:::1;::::0;-1:-1:-1;;;13391:60:7;;;;::::1;10843:25:8::0;;;10884:18;;;10877:34;;;;10927:18;;;10920:34;10816:18;;13391:60:7::1;10641:319:8::0;13328:134:7::1;13472:28:::0;;-1:-1:-1;;;;13472:28:7::1;-1:-1:-1::0;;;13472:28:7::1;::::0;;-1:-1:-1;13510:13:7;::::1;:39:::0;;-1:-1:-1;;;;13510:39:7::1;-1:-1:-1::0;;;13533:15:7::1;-1:-1:-1::0;;;;;13510:39:7::1;;;::::0;;13576:17:::1;::::0;;::::1;::::0;13559:34;;13576:17;;;-1:-1:-1;;13559:34:7::1;::::0;13576:17;;13559:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;13631:16:7::1;::::0;::::1;:23:::0;13604:24:::1;13664:343;13684:16;13680:1;:20;13664:343;;;13721:19;13743:3;:16;;13760:1;13743:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;13793:17;;;:10:::1;:17:::0;;;;;;-1:-1:-1;;;;;13743:19:7;;::::1;13793:30:::0;;;;;;;;;;:40:::1;;::::0;13743:19;;-1:-1:-1;13793:40:7;13851:11;;;13847:25:::1;;13864:8;;;;13847:25;13886:49;-1:-1:-1::0;;;;;13886:15:7::1;:28;13915:11:::0;13928:6;13886:28:::1;:49::i;:::-;13976:11;-1:-1:-1::0;;;;;13954:42:7::1;13969:5;13954:42;13989:6;13954:42;;;;160:25:8::0;;148:2;133:18;;14:177;13954:42:7::1;;;;;;;;13707:300;;13664:343;13702:3;;13664:343;;;;14033:5;14022:36;14040:3;:17;;;14022:36;;;;160:25:8::0;;148:2;133:18;;14:177;14022:36:7::1;;;;;;;;13223:842;;2542:20:5::0;1857:1;3068:7;:21;2888:208;2542:20;13167:898:7;:::o;15795:139::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15899:28:7;15914:12;15899:14;:28::i;:::-;15892:35;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15892:35:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15892:35:7;;;;;;;;;-1:-1:-1;;;15892:35:7;;;;;;;;;;15795:139;-1:-1:-1;;15795:139:7:o;14625:745::-;2500:21:5;:19;:21::i;:::-;14693:15:7::1;14711:14;14719:5;14711:7;:14::i;:::-;14693:32;;14735:43;14749:5;14756:3;14761:16;14735:13;:43::i;:::-;14789:25;14817:17:::0;;;:10:::1;:17;::::0;;;;;;;14835:10:::1;14817:29:::0;;;;;;;14891:17:::1;::::0;::::1;::::0;14873:15:::1;::::0;::::1;::::0;14817:29;;14789:25;14873:35:::1;::::0;14891:17;14873:35:::1;:::i;:::-;14856:52;;14922:6;14932:1;14922:11:::0;14918:60:::1;;14942:36;::::0;-1:-1:-1;;;14942:36:7;;::::1;::::0;::::1;11139:25:8::0;;;14967:10:7::1;11180:18:8::0;;;11173:60;11112:18;;14942:36:7::1;10965:274:8::0;14918:60:7::1;15010:6;14989:8;:17;;;:27;;;;;;;:::i;:::-;;;;;;;;15047:6;15026:3;:17;;;:27;;;;;;;:::i;:::-;;;;;;;;15080:6;15063:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15122:15:7::1;::::0;::::1;::::0;15101:17:::1;::::0;::::1;::::0;:36;15097:152:::1;;15153:29:::0;;-1:-1:-1;;;;15153:29:7::1;-1:-1:-1::0;;;15153:29:7::1;::::0;;15220:17:::1;::::0;::::1;::::0;15201:37:::1;::::0;160:25:8;;;15213:5:7;;15201:37:::1;::::0;148:2:8;133:18;15201:37:7::1;;;;;;;15097:152;15259:48;-1:-1:-1::0;;;;;15259:15:7::1;:28;15288:10;15300:6:::0;15259:28:::1;:48::i;:::-;15322:41;::::0;160:25:8;;;15344:10:7::1;::::0;15337:5;;15322:41:::1;::::0;148:2:8;133:18;15322:41:7::1;;;;;;;14683:687;;;2542:20:5::0;1857:1;3068:7;:21;2888:208;14071:548:7;14124:15;14142:14;14150:5;14142:7;:14::i;:::-;14124:32;;14166:42;14180:5;14187:3;14192:15;14166:13;:42::i;:::-;14240:19;;-1:-1:-1;;;14240:19:7;;-1:-1:-1;;;;;14240:19:7;14222:15;:37;14218:128;;;14315:19;;14282:53;;-1:-1:-1;;;14282:53:7;;;;;11417:25:8;;;-1:-1:-1;;;14315:19:7;;;-1:-1:-1;;;;;14315:19:7;11458:18:8;;;11451:59;11390:18;;14282:53:7;11244:272:8;14218:128:7;14356:28;;-1:-1:-1;;;;14356:28:7;-1:-1:-1;;;14356:28:7;;;-1:-1:-1;14394:13:7;;:39;;-1:-1:-1;;;;;14394:39:7;-1:-1:-1;;;14417:15:7;-1:-1:-1;;;;;14394:39:7;;;;;14466:15;;;;14448:34;;;160:25:8;;;14448:34:7;14459:5;;14448:34;;;;;;148:2:8;14448:34:7;;;14497:3;:15;;;14516:1;14497:20;14493:120;;14533:29;;-1:-1:-1;;;;14533:29:7;-1:-1:-1;;;14533:29:7;;;14581:21;;-1:-1:-1;160:25:8;;14593:5:7;;14581:21;;148:2:8;133:18;14581:21:7;;;;;;;14493:120;14114:505;14071:548;:::o;9494:253::-;9547:15;9565:14;9573:5;9565:7;:14::i;:::-;9547:32;;9589:27;9605:5;9612:3;9589:15;:27::i;:::-;9626:40;9640:5;9647:3;9652:13;9626;:40::i;:::-;9676:30;;-1:-1:-1;;;;9676:30:7;-1:-1:-1;;;9676:30:7;;;9721:19;;9734:5;;9721:19;;-1:-1:-1;;9721:19:7;9537:210;9494:253;:::o;5462:1112::-;5556:13;5608:12;5660:1;5641:20;;;:59;;;541:1;5665:16;:35;5641:59;5637:138;;;5723:41;;-1:-1:-1;;;5723:41:7;;;;;160:25:8;;;133:18;;5723:41:7;14:177:8;5637:138:7;5807:15;5788;-1:-1:-1;;;;;5788:34:7;;5784:79;;5831:32;;-1:-1:-1;;;5831:32:7;;-1:-1:-1;;;;;11684:31:8;;5831:32:7;;;11666:50:8;11639:18;;5831:32:7;11521:201:8;5784:79:7;5882:9;:11;;;:9;:11;;;:::i;:::-;;;;-1:-1:-1;5903:15:7;5921:12;;;:5;:12;;;;;5943:24;;5957:10;-1:-1:-1;;;;5977:25:7;-1:-1:-1;;;;;;5977:25:7;;;;-1:-1:-1;;;5977:25:7;-1:-1:-1;;;;6012:37:7;-1:-1:-1;;;;;;;;6012:37:7;;;;;;;;;;;;;-1:-1:-1;6059:13:7;;:39;;-1:-1:-1;;6059:39:7;6082:15;6059:39;;;;;;;;;5921:12;;-1:-1:-1;6109:383:7;6129:16;6125:1;:20;6109:383;;;6166:19;6188:12;;6201:1;6188:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6166:37;-1:-1:-1;;;;;;6221:25:7;;6217:69;;6255:31;;-1:-1:-1;;;6255:31:7;;-1:-1:-1;;;;;5731:32:8;;6255:31:7;;;5713:51:8;5686:18;;6255:31:7;5553:217:8;6217:69:7;6304:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;6304:33:7;;;;;;;;;;;;6300:79;;;6346:33;;-1:-1:-1;;;6346:33:7;;-1:-1:-1;;;;;5731:32:8;;6346:33:7;;;5713:51:8;5686:18;;6346:33:7;5553:217:8;6300:79:7;6393:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;6393:33:7;;;;;;;;;;;:40;;-1:-1:-1;;6393:40:7;6429:4;6393:40;;;;;;6447:16;;;:34;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6447:34:7;;;;;;;6147:3;6109:383;;;;6525:10;-1:-1:-1;;;;;6507:60:7;6518:5;6507:60;6537:15;6554:12;;6507:60;;;;;;;;:::i;:::-;;;;;;;;5571:1003;;5462:1112;;;;;:::o;6580:1567::-;6725:20;6761:15;6779:14;6787:5;6779:7;:14::i;:::-;6761:32;;6803:27;6819:5;6826:3;6803:15;:27::i;:::-;6840:40;6854:5;6861:3;6866:13;6840;:40::i;:::-;6890:34;6913:5;6920:3;6890:22;:34::i;:::-;6939:17;;;:24;590:2;-1:-1:-1;6935:81:7;;6991:25;;-1:-1:-1;;;6991:25:7;;;;;160::8;;;133:18;;6991:25:7;14:177:8;6935:81:7;7031:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;7031:27:7;;;;;;;;;;;;7026:69;;7067:28;;-1:-1:-1;;;7067:28:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;7067:28:7;10965:274:8;7026:69:7;7110:20;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;7110:27:7;;;;;;;;;;;;7105:69;;7146:28;;-1:-1:-1;;;7146:28:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;7146:28:7;10965:274:8;7105:69:7;7197:5;-1:-1:-1;;;;;7188:14:7;:5;-1:-1:-1;;;;;7188:14:7;;7184:65;;7211:38;;-1:-1:-1;;;7211:38:7;;-1:-1:-1;;;;;13091:15:8;;;7211:38:7;;;13073:34:8;13143:15;;13123:18;;;13116:43;13008:18;;7211:38:7;12861:304:8;7184:65:7;7263:6;7273:1;7263:11;7259:36;;7283:12;;-1:-1:-1;;;7283:12:7;;;;;;;;;;;7259:36;-1:-1:-1;;;;;7309:30:7;;7305:65;;;7348:22;;-1:-1:-1;;;7348:22:7;;;;;160:25:8;;;133:18;;7348:22:7;14:177:8;7305:65:7;7384:13;7380:62;;7420:22;;-1:-1:-1;;;7420:22:7;;;;;;;;;;;7380:62;7456:24;;;;:17;:24;;;;;;;;:39;;;;;;;;;;;7452:121;;;7518:44;;-1:-1:-1;;;7518:44:7;;;;;10372:25:8;;;10413:18;;;10406:34;;;10345:18;;7518:44:7;10198:248:8;7452:121:7;7598:16;:18;;;:16;:18;;;:::i;:::-;;;;;7583:33;;7655:291;;;;;;;;7687:5;7655:291;;;;7713:5;-1:-1:-1;;;;;7655:291:7;;;;;7739:5;-1:-1:-1;;;;;7655:291:7;;;;;7766:6;7655:291;;;;7801:13;7655:291;;;;7836:24;7655:291;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;7892:15:7;7655:291;;;;;;;;;-1:-1:-1;7655:291:7;;;;;;;7626:26;;;:12;:26;;;;;;;:320;;;;;;;;;;;;;;-1:-1:-1;;;;;7626:320:7;;;-1:-1:-1;;;;;;7626:320:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;:320;;;;-1:-1:-1;;7626:320:7;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;7626:320:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7626:320:7;;;-1:-1:-1;;;7626:320:7;-1:-1:-1;;7626:320:7;;;;;;;-1:-1:-1;;7626:320:7;;;;;;;;;;-1:-1:-1;7956:24:7;;;:17;:24;;;;;;;;:39;;;;;;;;:46;;-1:-1:-1;;7956:46:7;-1:-1:-1;7956:46:7;;;;;;8012:17;;;:36;;;;;;;;;;;;;;;;;;;8064:76;;-1:-1:-1;;;;;13643:32:8;;;13625:51;;13692:18;;;13685:34;;;13735:18;;;13728:34;;;8064:76:7;;;8012:36;;7956:24;;8064:76;;13613:2:8;13598:18;8064:76:7;;;;;;;6751:1396;6580:1567;;;;;;;:::o;15517:132::-;15580:16;15615:14;15623:5;15615:7;:14::i;:::-;:27;;15608:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15608:34:7;;;;;;;;;;;;;;;;;;;;;;;15517:132;;;:::o;12076:1085::-;2500:21:5;:19;:21::i;:::-;12137:15:7::1;12155:14;12163:5;12155:7;:14::i;:::-;12137:32;;12179:42;12193:5;12200:3;12205:15;12179:13;:42::i;:::-;12231:34;12254:5;12261:3;12231:22;:34::i;:::-;12276:25;12304:17:::0;;;:10:::1;:17;::::0;;;;;;;12322:10:::1;12304:29:::0;;;;;;;12360:17:::1;::::0;::::1;::::0;12304:29;;12391:11;;;12387:60:::1;;12411:36;::::0;-1:-1:-1;;;12411:36:7;;::::1;::::0;::::1;11139:25:8::0;;;12436:10:7::1;11180:18:8::0;;;11173:60;11112:18;;12411:36:7::1;10965:274:8::0;12387:60:7::1;12461:15;::::0;::::1;::::0;:20;12457:65:::1;;12490:32;::::0;-1:-1:-1;;;12490:32:7;;::::1;::::0;::::1;11139:25:8::0;;;12511:10:7::1;11180:18:8::0;;;11173:60;11112:18;;12490:32:7::1;10965:274:8::0;12457:65:7::1;12551:6;12533:8;:15;;:24;;;;12586:6;12567:3;:15;;;:25;;;;;;;:::i;:::-;;;;;;;;12619:6;12602:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12660:40:7::1;::::0;-1:-1:-1;;;12660:40:7;;12694:4:::1;12660:40;::::0;::::1;5713:51:8::0;12636:21:7::1;::::0;12660:15:::1;-1:-1:-1::0;;;;;12660:25:7::1;::::0;::::1;::::0;5686:18:8;;12660:40:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12636:64:::0;-1:-1:-1;12710:67:7::1;-1:-1:-1::0;;;;;12710:15:7::1;:32;12743:10;12763:4;12770:6:::0;12710:32:::1;:67::i;:::-;12806:40;::::0;-1:-1:-1;;;12806:40:7;;12840:4:::1;12806:40;::::0;::::1;5713:51:8::0;12787:16:7::1;::::0;12849:13;;-1:-1:-1;;;;;12806:15:7::1;:25;::::0;::::1;::::0;5686:18:8;;12806:40:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;;:::i;:::-;12787:75;;12888:6;12876:8;:18;12872:73;;12903:42;::::0;-1:-1:-1;;;12903:42:7;;::::1;::::0;::::1;10372:25:8::0;;;10413:18;;;10406:34;;;10345:18;;12903:42:7::1;10198:248:8::0;12872:73:7::1;12961:36;::::0;160:25:8;;;12978:10:7::1;::::0;12971:5;;12961:36:::1;::::0;148:2:8;133:18;12961:36:7::1;;;;;;;13030:3;:17;;;13011:3;:15;;;:36:::0;13007:148:::1;;13063:28:::0;;-1:-1:-1;;;;13063:28:7::1;-1:-1:-1::0;;;13063:28:7::1;::::0;;13128:15:::1;::::0;::::1;::::0;13110:34:::1;::::0;160:25:8;;;13121:5:7;;13110:34:::1;::::0;148:2:8;133:18;13110:34:7::1;;;;;;;13007:148;12127:1034;;;;;2542:20:5::0;1857:1;3068:7;:21;2888:208;15940:266:7;16020:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16020:15:7;16047:14;16055:5;16047:7;:14::i;:::-;-1:-1:-1;16076:20:7;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;16076:33:7;;;;;;;;;;;;16071:81;;16118:34;;-1:-1:-1;;;16118:34:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;16118:34:7;10965:274:8;16071:81:7;-1:-1:-1;16169:17:7;;;;:10;:17;;;;;;;;-1:-1:-1;;;;;16169:30:7;;;;;;;;;;16162:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:266;;;;;:::o;15655:134::-;15719:16;15754:14;15762:5;15754:7;:14::i;:::-;:28;;15747:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15655:134;;;:::o;8153:728::-;8235:15;8253:14;8261:5;8253:7;:14::i;:::-;8235:32;;8277:40;8291:5;8298:3;8303:13;8277;:40::i;:::-;8327:34;8350:5;8357:3;8327:22;:34::i;:::-;8372:29;8404:28;8419:12;8404:14;:28::i;:::-;8446:16;;8372:60;;-1:-1:-1;8446:25:7;;8442:70;;8480:32;;-1:-1:-1;;;8480:32:7;;;;;160:25:8;;;133:18;;8480:32:7;14:177:8;8442:70:7;8526:16;;;;-1:-1:-1;;;;;8526:16:7;8546:10;8526:30;8522:87;;8565:44;;-1:-1:-1;;;8565:44:7;;;;;11139:25:8;;;8598:10:7;11180:18:8;;;11173:60;11112:18;;8565:44:7;10965:274:8;8522:87:7;8619:76;8644:12;8658:10;8670:24;8619;:76::i;:::-;8706:17;;;:45;;-1:-1:-1;;;;;8792:15:7;8761:47;-1:-1:-1;;;8761:47:7;-1:-1:-1;;8761:47:7;;;;8726:25;8761:47;;;8823:51;;8863:10;;8849:12;;8842:5;;8823:51;;-1:-1:-1;;8823:51:7;8225:656;;8153:728;;:::o;16212:335::-;16296:7;16315:14;16323:5;16315:7;:14::i;:::-;-1:-1:-1;16344:20:7;;;;:13;:20;;;;;;;;-1:-1:-1;;;;;16344:33:7;;;;;;;;;;;;16339:81;;16386:34;;-1:-1:-1;;;16386:34:7;;;;;11139:25:8;;;-1:-1:-1;;;;;11200:32:8;;11180:18;;;11173:60;11112:18;;16386:34:7;10965:274:8;16339:81:7;16430:25;16458:17;;;:10;:17;;;;;;;;-1:-1:-1;;;;;16458:30:7;;;;;;;;;16525:15;;;;16505:17;;;;:35;;16525:15;16505:35;:::i;:::-;16498:42;16212:335;-1:-1:-1;;;;16212:335:7:o;16827:173::-;16881:15;16914:12;;;:5;:12;;;;;;16940:9;;-1:-1:-1;;;16940:9:7;;;;:26;;;;;;;;:::i;:::-;;16936:57;;16975:18;;-1:-1:-1;;;16975:18:7;;;;;160:25:8;;;133:18;;16975::7;14:177:8;16936:57:7;16827:173;;;:::o;17264:157::-;17348:11;;-1:-1:-1;;;;;17348:11:7;17363:10;17348:25;17344:70;;17382:32;;-1:-1:-1;;;17382:32:7;;;;;11139:25:8;;;17403:10:7;11180:18:8;;;11173:60;11112:18;;17382:32:7;10965:274:8;17427:181:7;17541:8;17528:21;;;;;;;;:::i;:::-;:9;;-1:-1:-1;;;17528:9:7;;;;:21;;;;;;;;:::i;:::-;;17524:77;;17591:9;;17558:43;;-1:-1:-1;;;17558:43:7;;;;17574:5;;17581:8;;-1:-1:-1;;;17591:9:7;;;;;17558:43;;;:::i;17524:77::-;17427:181;;;:::o;17614:219::-;17724:19;;-1:-1:-1;;;17724:19:7;;-1:-1:-1;;;;;17724:19:7;17705:15;:38;17701:126;;17796:19;;17766:50;;-1:-1:-1;;;17766:50:7;;;;;11417:25:8;;;-1:-1:-1;;;17796:19:7;;;-1:-1:-1;;;;;17796:19:7;11458:18:8;;;11451:59;11390:18;;17766:50:7;11244:272:8;17006:252:7;17074:29;17128:26;;;:12;:26;;;;;;17168:17;;;;;;:42;;;;;;;;:::i;:::-;;17164:87;;17219:32;;-1:-1:-1;;;17219:32:7;;;;;160:25:8;;;133:18;;17219:32:7;14:177:8;17839:296:7;18021:8;18000:29;;;;;;;;:::i;:::-;:17;;;;;;:29;;;;;;;;:::i;:::-;;17996:133;;18100:17;;;;18052:66;;-1:-1:-1;;;18052:66:7;;;;18076:12;;18090:8;;18100:17;;;18052:66;;;:::i;2575:307:5:-;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:5;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;1219:160:4:-;1328:43;;-1:-1:-1;;;;;14946:32:8;;;1328:43:4;;;14928:51:8;14995:18;;;14988:34;;;1301:71:4;;1321:5;;1343:14;;;;;14901:18:8;;1328:43:4;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1328:43:4;;;;;;;;;;;1301:19;:71::i;1618:188::-;1745:53;;-1:-1:-1;;;;;15291:15:8;;;1745:53:4;;;15273:34:8;15343:15;;;15323:18;;;15316:43;15375:18;;;15368:34;;;1718:81:4;;1738:5;;1760:18;;;;;15208::8;;1745:53:4;15033:375:8;1718:81:4;1618:188;;;;:::o;8370:720::-;8450:18;8478:19;8616:4;8613:1;8606:4;8600:11;8593:4;8587;8583:15;8580:1;8573:5;8566;8561:60;8673:7;8663:176;;8717:4;8711:11;8762:16;8759:1;8754:3;8739:40;8808:16;8803:3;8796:29;8663:176;-1:-1:-1;;8916:1:4;8910:8;8866:16;;-1:-1:-1;8942:15:4;;:68;;8994:11;9009:1;8994:16;;8942:68;;;-1:-1:-1;;;;;8960:26:4;;;:31;8942:68;8938:146;;;9033:40;;-1:-1:-1;;;9033:40:4;;-1:-1:-1;;;;;5731:32:8;;9033:40:4;;;5713:51:8;5686:18;;9033:40:4;5553:217:8;196:180;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:8;;196:180;-1:-1:-1;196:180:8:o;490:127::-;551:10;546:3;542:20;539:1;532:31;582:4;579:1;572:15;606:4;603:1;596:15;622:139;702:1;695:5;692:12;682:46;;708:18;;:::i;:::-;737;;622:139::o;873:465::-;926:3;964:5;958:12;991:6;986:3;979:19;1017:4;1046;1041:3;1037:14;1030:21;;1085:4;1078:5;1074:16;1108:1;1118:195;1132:6;1129:1;1126:13;1118:195;;;1197:13;;-1:-1:-1;;;;;1193:39:8;1181:52;;1253:12;;;;1288:15;;;;1229:1;1147:9;1118:195;;;-1:-1:-1;1329:3:8;;873:465;-1:-1:-1;;;;;873:465:8:o;1343:439::-;1396:3;1434:5;1428:12;1461:6;1456:3;1449:19;1487:4;1516;1511:3;1507:14;1500:21;;1555:4;1548:5;1544:16;1578:1;1588:169;1602:6;1599:1;1596:13;1588:169;;;1663:13;;1651:26;;1697:12;;;;1732:15;;;;1624:1;1617:9;1588:169;;1787:1774;1956:2;1945:9;1938:21;1968:53;2017:2;2006:9;2002:18;1993:6;1987:13;-1:-1:-1;;;;;447:31:8;435:44;;381:104;1968:53;1919:4;2068:2;2060:6;2056:15;2050:22;2081:58;2135:2;2124:9;2120:18;2106:12;2081:58;:::i;:::-;-1:-1:-1;2188:2:8;2176:15;;2170:22;-1:-1:-1;;;;;831:30:8;;2250:2;2235:18;;819:43;-1:-1:-1;2303:2:8;2291:15;;2285:22;-1:-1:-1;;;;;831:30:8;;2365:3;2350:19;;819:43;-1:-1:-1;2419:3:8;2407:16;;2401:23;-1:-1:-1;;;;;831:30:8;;2482:3;2467:19;;819:43;-1:-1:-1;2536:3:8;2524:16;;2518:23;-1:-1:-1;;;;;831:30:8;;2599:3;2584:19;;819:43;-1:-1:-1;2653:3:8;2641:16;;2635:23;-1:-1:-1;;;;;831:30:8;;2716:3;2701:19;;819:43;-1:-1:-1;2758:3:8;2746:16;;2740:23;2782:3;2801:18;;;2794:30;;;;2849:15;;2843:22;2884:3;2903:18;;;2896:30;;;;2951:15;;2945:22;2986:3;3005:18;;;2998:30;;;;3053:15;;3047:22;3088:3;3107:18;;;3100:30;;;;3167:15;;3161:22;3202:6;3228:3;3247:19;;;3240:31;;;3294:65;3354:3;3339:19;;3161:22;3294:65;:::i;:::-;3396:16;;;3390:23;3453:22;;;-1:-1:-1;;3449:36:8;3429:18;;;3422:64;3280:79;;-1:-1:-1;3503:52:8;3280:79;3390:23;3503:52;:::i;:::-;3495:60;1787:1774;-1:-1:-1;;;;;;1787:1774:8:o;3566:248::-;3634:6;3642;3695:2;3683:9;3674:7;3670:23;3666:32;3663:52;;;3711:1;3708;3701:12;3663:52;-1:-1:-1;;3734:23:8;;;3804:2;3789:18;;;3776:32;;-1:-1:-1;3566:248:8:o;3819:147::-;3907:1;3900:5;3897:12;3887:46;;3913:18;;:::i;3971:948::-;4117:4;4159:3;4148:9;4144:19;4136:27;;4196:6;4190:13;4179:9;4172:32;4251:4;4243:6;4239:17;4233:24;4293:1;4289;4284:3;4280:11;4276:19;4351:2;4337:12;4333:21;4326:4;4315:9;4311:20;4304:51;4423:2;4415:4;4407:6;4403:17;4397:24;4393:33;4386:4;4375:9;4371:20;4364:63;;;4483:4;4475:6;4471:17;4465:24;4458:4;4447:9;4443:20;4436:54;4546:4;4538:6;4534:17;4528:24;4521:4;4510:9;4506:20;4499:54;4602:4;4594:6;4590:17;4584:24;4617:70;4681:4;4670:9;4666:20;4650:14;4617:70;:::i;:::-;;4736:4;4728:6;4724:17;4718:24;-1:-1:-1;;;;;4837:2:8;4821:14;4817:23;4810:4;4799:9;4795:20;4788:53;4909:2;4901:4;4893:6;4889:17;4883:24;4879:33;4872:4;4861:9;4857:20;4850:63;;;3971:948;;;;:::o;4924:173::-;4992:20;;-1:-1:-1;;;;;5041:31:8;;5031:42;;5021:70;;5087:1;5084;5077:12;5102:254;5170:6;5178;5231:2;5219:9;5210:7;5206:23;5202:32;5199:52;;;5247:1;5244;5237:12;5199:52;5283:9;5270:23;5260:33;;5312:38;5346:2;5335:9;5331:18;5312:38;:::i;:::-;5302:48;;5102:254;;;;;:::o;6028:777::-;6122:6;6130;6138;6191:2;6179:9;6170:7;6166:23;6162:32;6159:52;;;6207:1;6204;6197:12;6159:52;6247:9;6234:23;-1:-1:-1;;;;;6317:2:8;6309:6;6306:14;6303:34;;;6333:1;6330;6323:12;6303:34;6371:6;6360:9;6356:22;6346:32;;6416:7;6409:4;6405:2;6401:13;6397:27;6387:55;;6438:1;6435;6428:12;6387:55;6478:2;6465:16;6504:2;6496:6;6493:14;6490:34;;;6520:1;6517;6510:12;6490:34;6575:7;6568:4;6558:6;6555:1;6551:14;6547:2;6543:23;6539:34;6536:47;6533:67;;;6596:1;6593;6586:12;6533:67;6627:4;6619:13;;;;-1:-1:-1;6651:6:8;-1:-1:-1;6692:20:8;;;6679:34;;6742:14;;;6732:25;;6722:53;;6771:1;6768;6761:12;6722:53;;6794:5;6784:15;;;6028:777;;;;;:::o;6810:466::-;6905:6;6913;6921;6929;6937;6990:3;6978:9;6969:7;6965:23;6961:33;6958:53;;;7007:1;7004;6997:12;6958:53;7043:9;7030:23;7020:33;;7072:38;7106:2;7095:9;7091:18;7072:38;:::i;:::-;7062:48;;7129:38;7163:2;7152:9;7148:18;7129:38;:::i;:::-;6810:466;;;;-1:-1:-1;7119:48:8;;7214:2;7199:18;;7186:32;;-1:-1:-1;7265:3:8;7250:19;7237:33;;6810:466;-1:-1:-1;;6810:466:8:o;7281:658::-;7452:2;7504:21;;;7574:13;;7477:18;;;7596:22;;;7423:4;;7452:2;7675:15;;;;7649:2;7634:18;;;7423:4;7718:195;7732:6;7729:1;7726:13;7718:195;;;7797:13;;-1:-1:-1;;;;;7793:39:8;7781:52;;7888:15;;;;7853:12;;;;7829:1;7747:9;7718:195;;;-1:-1:-1;7930:3:8;;7281:658;-1:-1:-1;;;;;;7281:658:8:o;8499:632::-;8670:2;8722:21;;;8792:13;;8695:18;;;8814:22;;;8641:4;;8670:2;8893:15;;;;8867:2;8852:18;;;8641:4;8936:169;8950:6;8947:1;8944:13;8936:169;;;9011:13;;8999:26;;9080:15;;;;9045:12;;;;8972:1;8965:9;8936:169;;9136:127;9197:10;9192:3;9188:20;9185:1;9178:31;9228:4;9225:1;9218:15;9252:4;9249:1;9242:15;9268:128;9335:9;;;9356:11;;;9353:37;;;9370:18;;:::i;9401:168::-;9474:9;;;9505;;9522:15;;;9516:22;;9502:37;9492:71;;9543:18;;:::i;9574:217::-;9614:1;9640;9630:132;;9684:10;9679:3;9675:20;9672:1;9665:31;9719:4;9716:1;9709:15;9747:4;9744:1;9737:15;9630:132;-1:-1:-1;9776:9:8;;9574:217::o;9796:127::-;9857:10;9852:3;9848:20;9845:1;9838:31;9888:4;9885:1;9878:15;9912:4;9909:1;9902:15;9928:135;9967:3;9988:17;;;9985:43;;10008:18;;:::i;:::-;-1:-1:-1;10055:1:8;10044:13;;9928:135::o;10068:125::-;10133:9;;;10154:10;;;10151:36;;;10167:18;;:::i;11727:186::-;11786:6;11839:2;11827:9;11818:7;11814:23;11810:32;11807:52;;;11855:1;11852;11845:12;11807:52;11878:29;11897:9;11878:29;:::i;12126:730::-;-1:-1:-1;;;;;12382:31:8;;12364:50;;12352:2;12433;12451:18;;;12444:30;;;12337:18;;;12509:22;;;12304:4;;12588:6;;12562:2;12547:18;;12304:4;12622:208;12636:6;12633:1;12630:13;12622:208;;;-1:-1:-1;;;;;12701:26:8;12720:6;12701:26;:::i;:::-;12697:52;12685:65;;12805:15;;;;12770:12;;;;12658:1;12651:9;12622:208;;;-1:-1:-1;12847:3:8;12126:730;-1:-1:-1;;;;;;;12126:730:8:o;13773:184::-;13843:6;13896:2;13884:9;13875:7;13871:23;13867:32;13864:52;;;13912:1;13909;13902:12;13864:52;-1:-1:-1;13935:16:8;;13773:184;-1:-1:-1;13773:184:8:o;13962:375::-;14184:25;;;14172:2;14157:18;;14218:52;14266:2;14251:18;;14243:6;14218:52;:::i;:::-;14279;14327:2;14316:9;14312:18;14304:6;14279:52;:::i;14342:407::-;14580:25;;;14568:2;14553:18;;14614:60;14670:2;14655:18;;14647:6;14614:60;:::i;:::-;14683;14739:2;14728:9;14724:18;14716:6;14683:60;:::i","linkReferences":{},"immutableReferences":{"1066":[{"start":708,"length":32},{"start":3192,"length":32},{"start":3931,"length":32},{"start":6372,"length":32},{"start":6500,"length":32},{"start":6573,"length":32}]}}}}}}},"signatures":{"function":[{"signature":"acceptObligation(uint256,uint256)","signatureHash4":"0xee6a51ef","signatureHash32":"0xee6a51ef64025bf785100be29899e5064100f2dba4320a89316c0da1e66afcba"},{"signature":"cancelObligation(uint256,uint256)","signatureHash4":"0x2e9b3cb0","signatureHash32":"0x2e9b3cb0b5143532414d43420f2907cb4c6079462a0f23099ac2faf0487f5c9b"},{"signature":"cancelRun(uint256)","signatureHash4":"0x8f0b8455","signatureHash32":"0x8f0b845538131be1fd2869bacce76d7675c8542b6d6eb3e09fb3f1773715d89c"},{"signature":"claimRefund(uint256)","signatureHash4":"0x5b7baf64","signatureHash32":"0x5b7baf64f8f65874cecd08a5873c041047684139fc14c69dd60155fc6af50706"},{"signature":"closeRun(uint256)","signatureHash4":"0x0f065ef6","signatureHash32":"0x0f065ef6c825f96ec887303d180292495fa50f2fd1c4a2647ae18be30a60015c"},{"signature":"COMPRESSION_BPS_DENOMINATOR()","signatureHash4":"0x8c7167f9","signatureHash32":"0x8c7167f9c89b22c13347d37f3bfc2affa4bf0404f1a6545a68f439f30f4f902c"},{"signature":"compressionBps(uint256)","signatureHash4":"0x0a575bda","signatureHash32":"0x0a575bdab800e651487b9ef16b3a6069c5d25ace850c8596608545498afc6d0e"},{"signature":"createRun(address[],uint64)","signatureHash4":"0x98d7993c","signatureHash32":"0x98d7993c74fb5236b8da9b69b53a6f205084cfcdd936636dd6baec1abca6169b"},{"signature":"expireRun(uint256)","signatureHash4":"0x733f320d","signatureHash32":"0x733f320d42fc665dff4e92049a70211f6a99b4073caf1a02c7ed894082559082"},{"signature":"fund(uint256)","signatureHash4":"0xca1d209d","signatureHash32":"0xca1d209dc81e495c5f70792fcfc8d56f8d8940ef22f28ca5f179e8a34a15b0bf"},{"signature":"getObligationIds(uint256)","signatureHash4":"0xedd4050a","signatureHash32":"0xedd4050aad66dd01ff62bc875176928e7fe9b04ccf89653889656e45481b329f"},{"signature":"getObligation(uint256)","signatureHash4":"0x5abae4f3","signatureHash32":"0x5abae4f3e7a6fd1ea7ec476b9ff81299147aeaf2478e7be89d835695dc814d5c"},{"signature":"getParticipants(uint256)","signatureHash4":"0xc1e3bd3e","signatureHash32":"0xc1e3bd3effccee2b9334fe03ce1f64567deec62c658a4393ac39516895cbb349"},{"signature":"getPosition(uint256,address)","signatureHash4":"0xd29f541d","signatureHash32":"0xd29f541db6d251e6a0dfbc31a3b02d0c1c8866908720161a3e163d3a77377dac"},{"signature":"getRun(uint256)","signatureHash4":"0x236d50b2","signatureHash32":"0x236d50b2e024bf51ed792fbbd586e306d12ec8fed23a4bd5c6eba34ce573c150"},{"signature":"isParticipant(uint256,address)","signatureHash4":"0x758d9b89","signatureHash32":"0x758d9b896ee0065ca7999a60171d410aa42275c5d6631c66d4258c509fe11db7"},{"signature":"MAX_OBLIGATION_AMOUNT()","signatureHash4":"0x00c3a54d","signatureHash32":"0x00c3a54d01e2d073afb05d846e2c011b473cadce140f76f13e7a4ec2221225de"},{"signature":"MAX_OBLIGATIONS()","signatureHash4":"0xafe1c9aa","signatureHash32":"0xafe1c9aac344b7d916505c02771380aa5a52d382652f037591ad2a3028e7fd27"},{"signature":"MAX_PARTICIPANTS()","signatureHash4":"0xf3baf070","signatureHash32":"0xf3baf07005f8eb671001831e43246c193b1261bb3c68fa99f1bef0422d78a8b3"},{"signature":"nextObligationId()","signatureHash4":"0x2447e4ac","signatureHash32":"0x2447e4ac9765e3a8890bef7d9e5a63720e4a92a52ada68e80af4be3e3d6d8d72"},{"signature":"nextRunId()","signatureHash4":"0xcd2d944f","signatureHash32":"0xcd2d944f59580b72f7f04fc3b124f5c6f185ce368f4636123789c99be5d5a121"},{"signature":"proposeObligation(uint256,address,address,uint256,bytes32)","signatureHash4":"0x9fa050c7","signatureHash32":"0x9fa050c76c986e7592e0292a6016abc6402f7e67c5c40af016c7ae512a46a6cb"},{"signature":"requiredFunding(uint256,address)","signatureHash4":"0xfb95adff","signatureHash32":"0xfb95adff50c4f585b603c410e45886f8708e81626eb675a229ebd6a90286ec89"},{"signature":"settlementToken()","signatureHash4":"0x7b9e618d","signatureHash32":"0x7b9e618db55ef690e3de16c28abdcd2d92fae37304b50aa2106d204e721676ca"},{"signature":"settleRun(uint256)","signatureHash4":"0x2e9c076c","signatureHash32":"0x2e9c076c41c301bcac83a097fbfbae3bad5f7c34772fd041d9c84c93bcef3724"},{"signature":"totalEscrowed()","signatureHash4":"0xf9168231","signatureHash32":"0xf9168231dca23f9bc39ea418286e6755fb1fd23e8f05d23eca7512873f0869f4"},{"signature":"usedReferenceHash(uint256,bytes32)","signatureHash4":"0x83b8f8f1","signatureHash32":"0x83b8f8f111912c67ef58a1612fedbcdd715276688857f47d4d54c7e76750f4cb"}],"event":[{"signature":"DebtorRefunded(uint256,address,uint256)","signatureHash4":"0xc0619516","signatureHash32":"0xc0619516ec5bfe00f87f7e367e81df9a95bbcc287eb1433aa9ab0043708e5248"},{"signature":"ObligationAccepted(uint256,uint256,address)","signatureHash4":"0xc98f9300","signatureHash32":"0xc98f93009ee7edac2b64eadac87ee6635deef568f5e6591573773737279dab26"},{"signature":"ObligationCancelled(uint256,uint256)","signatureHash4":"0x3e594ebc","signatureHash32":"0x3e594ebc5f743f7aa4150852f5e56555d157672b26fa980f1ba38584d4b21934"},{"signature":"ObligationProposed(uint256,uint256,address,address,uint256,bytes32)","signatureHash4":"0x7812cf24","signatureHash32":"0x7812cf24f0be14c4bc8e0414b945ed2aea5c00b0c5feac96db9230a06bf7e701"},{"signature":"RunCancelled(uint256)","signatureHash4":"0xeade08a9","signatureHash32":"0xeade08a9817790eda9a02d30965d8495d0e5b09078fc2446155f4c2d55954230"},{"signature":"RunClosed(uint256,uint256,uint256)","signatureHash4":"0x4e9137b1","signatureHash32":"0x4e9137b101b423b6d207bd4fb2ea32e8412c396a706c9800cf5ebcf01c19395e"},{"signature":"RunCovered(uint256,uint256)","signatureHash4":"0x7ebf885c","signatureHash32":"0x7ebf885c5244eb8af03907b315c6416b5c15fbdbf417603790b0b944806312ef"},{"signature":"RunCreated(uint256,address,uint64,address[])","signatureHash4":"0x7655ca2f","signatureHash32":"0x7655ca2f7f8901979c04ad0ac85c83a872262c4dfdba7ea1ade748e1cc9319df"},{"signature":"RunExpired(uint256,uint256)","signatureHash4":"0xb56eae47","signatureHash32":"0xb56eae471883b29ee3a10f5777ad1c72dec314c5c876ca00fd6e6f83bbb081ba"},{"signature":"RunFunded(uint256,address,uint256)","signatureHash4":"0x6107a26f","signatureHash32":"0x6107a26f4dcf0cc971d017cc3fc17386f44926a40e3721f6d856ed60d4182c79"},{"signature":"RunRefunded(uint256,uint256)","signatureHash4":"0xcff64f78","signatureHash32":"0xcff64f789e644f8d7b49e65a3a6c78291f6ff21405b4f6745cc29787c2009768"},{"signature":"RunSettled(uint256,uint256)","signatureHash4":"0xa5afd440","signatureHash32":"0xa5afd440b539cc9bd8fb314502e8d3b5f3e2f3754da689db212acf28c00bd7c6"},{"signature":"SettlementPaid(uint256,address,uint256)","signatureHash4":"0x376802fd","signatureHash32":"0x376802fdd294d0be31f8deed74f1e3dd20a9c2aa363d6d9d511e1256e0dafe40"}],"error":[{"signature":"AccountingMismatch(uint256,uint256)","signatureHash4":"0xc11437df","signatureHash32":"0xc11437dfe49471c9cb3a931c1b102b2cc924c53b242099c0398bb0331a7a61d5"},{"signature":"AlreadyFunded(uint256,address)","signatureHash4":"0xbb35586d","signatureHash32":"0xbb35586dc8de11d90d0fdb704f0ce199434b6e1adde04b18dfc1bea2b1e3bfd0"},{"signature":"AmountTooLarge(uint256)","signatureHash4":"0x08083b2a","signatureHash32":"0x08083b2a16b607736bde3b2f81a2e47b6cddd068539243b1d8b47462dd533e58"},{"signature":"DuplicateParticipant(address)","signatureHash4":"0xb5366d92","signatureHash32":"0xb5366d92a601bb46b616cb998a611cec17acc79c4c05affd3881f1bac2c2bdf6"},{"signature":"DuplicateReferenceHash(uint256,bytes32)","signatureHash4":"0x65f33afa","signatureHash32":"0x65f33afa5d7b45415605e3121443cf1bd608831b94e4835587722277d4b7dd8f"},{"signature":"FundingDeadlineNotReached(uint256,uint256)","signatureHash4":"0x53771c91","signatureHash32":"0x53771c91ab15e0a54b8d3fb7168fd58d151c24042bd653daaed44f83bebba802"},{"signature":"FundingDeadlineReached(uint256,uint256)","signatureHash4":"0x8a4548d2","signatureHash32":"0x8a4548d2a99199d654d2b6f37ba3fa65cb188117fa32eaa83e5be6201b896ff5"},{"signature":"InvalidDeadline(uint256)","signatureHash4":"0x277b2d74","signatureHash32":"0x277b2d74af01602a63c26ddf8115dea2851c4ae60557400780fc3bcf3d192e71"},{"signature":"InvalidObligationParties(address,address)","signatureHash4":"0x5acdab8c","signatureHash32":"0x5acdab8c747100835790acfc4becd0a2cef0ddab540ab68382018ba9f1c98f60"},{"signature":"InvalidObligationStatus(uint256,uint8,uint8)","signatureHash4":"0xb4d94c65","signatureHash32":"0xb4d94c6572a9a0ee6034a5a73c5677213cf7bb91c5f8162f7ae101ba7974ffb1"},{"signature":"InvalidParticipant(address)","signatureHash4":"0x2c53d702","signatureHash32":"0x2c53d702aa6451577a752f10b60e34d1c3ae3ea6c5ba2b81ec92a2e132434e5f"},{"signature":"InvalidParticipantCount(uint256)","signatureHash4":"0x6297c9b7","signatureHash32":"0x6297c9b7de5abcbd67bd195d4eea6e7dd80cc143f7ef00f15d4a491b57f111a4"},{"signature":"InvalidReferenceHash()","signatureHash4":"0xf3d5f689","signatureHash32":"0xf3d5f689bc4813bbe0804b02d33182f2bc84e56a97998bfcae509fafe0860562"},{"signature":"InvalidRunState(uint256,uint8,uint8)","signatureHash4":"0x9c1fa0e0","signatureHash32":"0x9c1fa0e0a61d46c4c42341c963ae63c376c44aac394ab74c6e6c9fa32e43534d"},{"signature":"InvalidSettlementToken()","signatureHash4":"0xa790f950","signatureHash32":"0xa790f9506b258e0ce24f3d81cbe629251d95d0d1ee56fe62dbbe97194a8d7145"},{"signature":"NoFundingRequired(uint256,address)","signatureHash4":"0xf6289652","signatureHash32":"0xf6289652f0a49fed30d20adc28199cb5d30143938240980a650a77dc49251a27"},{"signature":"NoObligations(uint256)","signatureHash4":"0x22ce9ebb","signatureHash32":"0x22ce9ebb0cb2bdc0d5a0e23ec32bbceb005f2021c144c72d70b7d1d6adca1932"},{"signature":"NoRefundAvailable(uint256,address)","signatureHash4":"0x55e3fc17","signatureHash32":"0x55e3fc17d019cb1710a7d9a91c0cb727e1dfdbe80e0d030343b6548ef724d925"},{"signature":"NotObligationPayer(uint256,address)","signatureHash4":"0x4261e2eb","signatureHash32":"0x4261e2ebb408e11bd589b892c3b51f2311154c919337b329fe3381fbada28a40"},{"signature":"NotParticipant(uint256,address)","signatureHash4":"0xf94014b4","signatureHash32":"0xf94014b4b24c41a4643cab24018bc1d11f759a1c4a94ec9737ebf948f9ccb017"},{"signature":"NotRunCreator(uint256,address)","signatureHash4":"0x7c94ca81","signatureHash32":"0x7c94ca81ffe1d2f877cbb5a57a1c92ed421223448af5086587b21fc3f3efbf56"},{"signature":"ObligationNotFound(uint256)","signatureHash4":"0xd2b5af01","signatureHash32":"0xd2b5af01c491b8c426d83ea4826bc4ab6ced08f73dabd42a7958679416856a53"},{"signature":"ReentrancyGuardReentrantCall()","signatureHash4":"0x3ee5aeb5","signatureHash32":"0x3ee5aeb571de7fc460830b4d0017439a1ca56fb0bc39062227ade4fe4a24c1ca"},{"signature":"RunNotFound(uint256)","signatureHash4":"0x10f82da6","signatureHash32":"0x10f82da6b64915275d19d525a9633ce1d10610b658d9b267c88f179169954d30"},{"signature":"RunNotFullyFunded(uint256,uint256,uint256)","signatureHash4":"0x1a56c469","signatureHash32":"0x1a56c4697c48691bb27378d6cc5ffc3d849be7ea75908cce5f45289844503348"},{"signature":"SafeERC20FailedOperation(address)","signatureHash4":"0x5274afe7","signatureHash32":"0x5274afe73c98b4749fc91ffae6b7b574e7842cb2144a159e9377a5f20b32edf9"},{"signature":"TooManyObligations(uint256)","signatureHash4":"0x5eb36f42","signatureHash32":"0x5eb36f42850ab798f8b6ff243cc8668bd7d8c6886f1f0ecb4db8574850ee5898"},{"signature":"UnacceptedObligation(uint256)","signatureHash4":"0x72a5da44","signatureHash32":"0x72a5da440c61142109d921e4b3665f270be9b1473de343141fc7d6dbb43be4eb"},{"signature":"UnsupportedTokenTransfer(uint256,uint256)","signatureHash4":"0x16602a77","signatureHash32":"0x16602a7739bf80588d9b354558d892432951ee26d5f91936ff6088433654153c"},{"signature":"ZeroAmount()","signatureHash4":"0x1f2a2005","signatureHash32":"0x1f2a2005cb66a8e145327e8814e243a0996aec9bfe1e15a495778b1236dbd485"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"421614","address":"0x516479a53483b675Fe4629E3C63088c51cf6eFa7"}