diff --git a/.gitignore b/.gitignore index 71f6a16..8cb9e36 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,7 @@ node_modules .env coverage coverage.json -typechain -typechain-types #Hardhat files cache -artifacts - +artifacts/build-info diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json new file mode 100644 index 0000000..cb70068 --- /dev/null +++ b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/95a2398b2b781a5a5893b30eeccd0c46.json" +} diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json new file mode 100644 index 0000000..ea3c577 --- /dev/null +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -0,0 +1,267 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "P2PIX", + "sourceName": "contracts/p2pix.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "defaultBlocks", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validSigners", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "seller", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "seller", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + } + ], + "name": "DepositClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "lockID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LockAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "lockId", + "type": "bytes32" + } + ], + "name": "LockReleased", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + } + ], + "name": "cancelDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "pixTarget", + "type": "string" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "relayerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "relayerPremium", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "lock", + "outputs": [ + { + "internalType": "bytes32", + "name": "lockID", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "lockID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pixTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "name": "release", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "validBacenSigners", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50604051620020223803806200202283398181016040528101906200003791906200030d565b8160008190555060005b81518160ff161015620000db576001806000848460ff16815181106200006c576200006b62000373565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000d290620003de565b91505062000041565b5050506200040c565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200010d81620000f8565b81146200011957600080fd5b50565b6000815190506200012d8162000102565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001838262000138565b810181811067ffffffffffffffff82111715620001a557620001a462000149565b5b80604052505050565b6000620001ba620000e4565b9050620001c8828262000178565b919050565b600067ffffffffffffffff821115620001eb57620001ea62000149565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b60006200027d6200027784620001cd565b620001ae565b90508083825260208201905060208402830185811115620002a357620002a2620001fc565b5b835b81811015620002d05780620002bb88826200024f565b845260208401935050602081019050620002a5565b5050509392505050565b600082601f830112620002f257620002f162000133565b5b81516200030484826020860162000266565b91505092915050565b60008060408385031215620003275762000326620000ee565b5b600062000337858286016200011c565b925050602083015167ffffffffffffffff8111156200035b576200035a620000f3565b5b6200036985828601620002da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b6000620003eb82620003d1565b915060ff8203620004015762000400620003a2565b5b600182019050919050565b611c06806200041c6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610e9b565b61014b565b005b61009d60048036038101906100989190610f37565b6102a7565b005b6100b960048036038101906100b49190610e9b565b61054d565b005b6100d560048036038101906100d09190611010565b61061c565b6040516100e2919061109a565b60405180910390f35b610105600480360381019061010091906110b5565b6109cb565b60405161011291906110fd565b60405180910390f35b6101356004803603810190610130919061117d565b6109eb565b604051610142919061109a565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611274565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061109a565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f2939291906113b8565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611463565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611492565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611523565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610bf7565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061109a565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611274565b60405180910390fd5b6105fb82610bf7565b50600060026000848152602001908152602001600020600201819055505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff16610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c9061158f565b60405180910390fd5b828160020154116106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906115fb565b60405180910390fd5b8683876040516020016106e093929190611684565b60405160208183030381529060405280519060200120915043600560008481526020019081526020016000206005015410610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074790611733565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600054436107b59190611782565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff16815481106108fb576108fa6117b6565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff168092919061093a906117f3565b91906101000a81548161ffff021916908361ffff1602179055505083826002016000828254610969919061181d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b84866040516109b8929190611860565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000806040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050838386604051602001610a9f939291906118bd565b604051602081830303815290604052805190602001209150806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610b989190611ab8565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610be693929190611b99565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610e5357600060056000858461ffff1681548110610c6957610c686117b6565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610d9357508060c00151155b15610df257838261ffff1681548110610daf57610dae6117b6565b5b9060005260206000200154848661ffff1681548110610dd157610dd06117b6565b5b90600052602060002001819055508480610dea906117f3565b955050610e3f565b438160a00151108015610e0757508060c00151155b15610e3e578060800151600260008881526020019081526020016000206002016000828254610e369190611782565b925050819055505b5b508080610e4b906117f3565b915050610c3c565b505050919050565b600080fd5b600080fd5b6000819050919050565b610e7881610e65565b8114610e8357600080fd5b50565b600081359050610e9581610e6f565b92915050565b600060208284031215610eb157610eb0610e5b565b5b6000610ebf84828501610e86565b91505092915050565b6000819050919050565b610edb81610ec8565b8114610ee657600080fd5b50565b600081359050610ef881610ed2565b92915050565b600060ff82169050919050565b610f1481610efe565b8114610f1f57600080fd5b50565b600081359050610f3181610f0b565b92915050565b600080600080600060a08688031215610f5357610f52610e5b565b5b6000610f6188828901610e86565b9550506020610f7288828901610ee9565b9450506040610f8388828901610e86565b9350506060610f9488828901610e86565b9250506080610fa588828901610f22565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fdd82610fb2565b9050919050565b610fed81610fd2565b8114610ff857600080fd5b50565b60008135905061100a81610fe4565b92915050565b600080600080600060a0868803121561102c5761102b610e5b565b5b600061103a88828901610e86565b955050602061104b88828901610ffb565b945050604061105c88828901610ffb565b935050606061106d88828901610ee9565b925050608061107e88828901610ee9565b9150509295509295909350565b61109481610e65565b82525050565b60006020820190506110af600083018461108b565b92915050565b6000602082840312156110cb576110ca610e5b565b5b60006110d984828501610ffb565b91505092915050565b60008115159050919050565b6110f7816110e2565b82525050565b600060208201905061111260008301846110ee565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261113d5761113c611118565b5b8235905067ffffffffffffffff81111561115a5761115961111d565b5b60208301915083600182028301111561117657611175611122565b5b9250929050565b6000806000806060858703121561119757611196610e5b565b5b60006111a587828801610ffb565b94505060206111b687828801610ee9565b935050604085013567ffffffffffffffff8111156111d7576111d6610e60565b5b6111e387828801611127565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061125e602c836111f1565b915061126982611202565b604082019050919050565b6000602082019050818103600083015261128d81611251565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611321816112c3565b61132b81866112f4565b94506001821660008114611346576001811461135b5761138e565b60ff198316865281151582028601935061138e565b611364856112ff565b60005b8381101561138657815481890152600182019150602081019050611367565b838801955050505b50505092915050565b6000819050919050565b6113b26113ad82610ec8565b611397565b82525050565b60006113c48286611314565b91506113d082856113a1565b6020820191506113e082846113a1565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061144d602b836111f1565b9150611458826113f1565b604082019050919050565b6000602082019050818103600083015261147c81611440565b9050919050565b61148c81610efe565b82525050565b60006080820190506114a7600083018761108b565b6114b46020830186611483565b6114c1604083018561108b565b6114ce606083018461108b565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b600061150d601d836111f1565b9150611518826114d7565b602082019050919050565b6000602082019050818103600083015261153c81611500565b9050919050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006115796020836111f1565b915061158482611543565b602082019050919050565b600060208201905081810360008301526115a88161156c565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006115e5601b836111f1565b91506115f0826115af565b602082019050919050565b60006020820190508181036000830152611614816115d8565b9050919050565b6000819050919050565b61163661163182610e65565b61161b565b82525050565b60008160601b9050919050565b60006116548261163c565b9050919050565b600061166682611649565b9050919050565b61167e61167982610fd2565b61165b565b82525050565b60006116908286611625565b6020820191506116a082856113a1565b6020820191506116b0828461166d565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b600061171d6033836111f1565b9150611728826116c1565b604082019050919050565b6000602082019050818103600083015261174c81611710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061178d82610ec8565b915061179883610ec8565b92508282019050808211156117b0576117af611753565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006117fe826117e5565b915061ffff820361181257611811611753565b5b600182019050919050565b600061182882610ec8565b915061183383610ec8565b925082820390508181111561184b5761184a611753565b5b92915050565b61185a81610ec8565b82525050565b6000604082019050611875600083018561108b565b6118826020830184611851565b9392505050565b82818337600083830152505050565b60006118a483856112f4565b93506118b1838584611889565b82840190509392505050565b60006118ca828587611898565b91506118d682846113a1565b602082019150819050949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b60006008830261196e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611931565b6119788683611931565b95508019841693508086168417925050509392505050565b6000819050919050565b60006119b56119b06119ab84610ec8565b611990565b610ec8565b9050919050565b6000819050919050565b6119cf8361199a565b6119e36119db826119bc565b84845461193e565b825550505050565b600090565b6119f86119eb565b611a038184846119c6565b505050565b5b81811015611a2757611a1c6000826119f0565b600181019050611a09565b5050565b601f821115611a6c57611a3d816112ff565b611a4684611921565b81016020851015611a55578190505b611a69611a6185611921565b830182611a08565b50505b505050565b600082821c905092915050565b6000611a8f60001984600802611a71565b1980831691505092915050565b6000611aa88383611a7e565b9150826002028217905092915050565b611ac1826118e7565b67ffffffffffffffff811115611ada57611ad96118f2565b5b611ae482546112c3565b611aef828285611a2b565b600060209050601f831160018114611b225760008415611b10578287015190505b611b1a8582611a9c565b865550611b82565b601f198416611b30866112ff565b60005b82811015611b5857848901518255600182019150602085019450602081019050611b33565b86831015611b755784890151611b71601f891682611a7e565b8355505b6001600288020188555050505b505050505050565b611b9381610fd2565b82525050565b6000606082019050611bae600083018661108b565b611bbb6020830185611b8a565b611bc86040830184611851565b94935050505056fea2646970667358221220edcb93a67aab1506665a2a6b0b40c4a620f728d32ab4345732acbd57b494d2f964736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610e9b565b61014b565b005b61009d60048036038101906100989190610f37565b6102a7565b005b6100b960048036038101906100b49190610e9b565b61054d565b005b6100d560048036038101906100d09190611010565b61061c565b6040516100e2919061109a565b60405180910390f35b610105600480360381019061010091906110b5565b6109cb565b60405161011291906110fd565b60405180910390f35b6101356004803603810190610130919061117d565b6109eb565b604051610142919061109a565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611274565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061109a565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f2939291906113b8565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611463565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611492565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611523565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610bf7565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061109a565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611274565b60405180910390fd5b6105fb82610bf7565b50600060026000848152602001908152602001600020600201819055505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff16610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c9061158f565b60405180910390fd5b828160020154116106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906115fb565b60405180910390fd5b8683876040516020016106e093929190611684565b60405160208183030381529060405280519060200120915043600560008481526020019081526020016000206005015410610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074790611733565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600054436107b59190611782565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff16815481106108fb576108fa6117b6565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff168092919061093a906117f3565b91906101000a81548161ffff021916908361ffff1602179055505083826002016000828254610969919061181d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b84866040516109b8929190611860565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000806040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050838386604051602001610a9f939291906118bd565b604051602081830303815290604052805190602001209150806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610b989190611ab8565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610be693929190611b99565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610e5357600060056000858461ffff1681548110610c6957610c686117b6565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610d9357508060c00151155b15610df257838261ffff1681548110610daf57610dae6117b6565b5b9060005260206000200154848661ffff1681548110610dd157610dd06117b6565b5b90600052602060002001819055508480610dea906117f3565b955050610e3f565b438160a00151108015610e0757508060c00151155b15610e3e578060800151600260008881526020019081526020016000206002016000828254610e369190611782565b925050819055505b5b508080610e4b906117f3565b915050610c3c565b505050919050565b600080fd5b600080fd5b6000819050919050565b610e7881610e65565b8114610e8357600080fd5b50565b600081359050610e9581610e6f565b92915050565b600060208284031215610eb157610eb0610e5b565b5b6000610ebf84828501610e86565b91505092915050565b6000819050919050565b610edb81610ec8565b8114610ee657600080fd5b50565b600081359050610ef881610ed2565b92915050565b600060ff82169050919050565b610f1481610efe565b8114610f1f57600080fd5b50565b600081359050610f3181610f0b565b92915050565b600080600080600060a08688031215610f5357610f52610e5b565b5b6000610f6188828901610e86565b9550506020610f7288828901610ee9565b9450506040610f8388828901610e86565b9350506060610f9488828901610e86565b9250506080610fa588828901610f22565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fdd82610fb2565b9050919050565b610fed81610fd2565b8114610ff857600080fd5b50565b60008135905061100a81610fe4565b92915050565b600080600080600060a0868803121561102c5761102b610e5b565b5b600061103a88828901610e86565b955050602061104b88828901610ffb565b945050604061105c88828901610ffb565b935050606061106d88828901610ee9565b925050608061107e88828901610ee9565b9150509295509295909350565b61109481610e65565b82525050565b60006020820190506110af600083018461108b565b92915050565b6000602082840312156110cb576110ca610e5b565b5b60006110d984828501610ffb565b91505092915050565b60008115159050919050565b6110f7816110e2565b82525050565b600060208201905061111260008301846110ee565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261113d5761113c611118565b5b8235905067ffffffffffffffff81111561115a5761115961111d565b5b60208301915083600182028301111561117657611175611122565b5b9250929050565b6000806000806060858703121561119757611196610e5b565b5b60006111a587828801610ffb565b94505060206111b687828801610ee9565b935050604085013567ffffffffffffffff8111156111d7576111d6610e60565b5b6111e387828801611127565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061125e602c836111f1565b915061126982611202565b604082019050919050565b6000602082019050818103600083015261128d81611251565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611321816112c3565b61132b81866112f4565b94506001821660008114611346576001811461135b5761138e565b60ff198316865281151582028601935061138e565b611364856112ff565b60005b8381101561138657815481890152600182019150602081019050611367565b838801955050505b50505092915050565b6000819050919050565b6113b26113ad82610ec8565b611397565b82525050565b60006113c48286611314565b91506113d082856113a1565b6020820191506113e082846113a1565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061144d602b836111f1565b9150611458826113f1565b604082019050919050565b6000602082019050818103600083015261147c81611440565b9050919050565b61148c81610efe565b82525050565b60006080820190506114a7600083018761108b565b6114b46020830186611483565b6114c1604083018561108b565b6114ce606083018461108b565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b600061150d601d836111f1565b9150611518826114d7565b602082019050919050565b6000602082019050818103600083015261153c81611500565b9050919050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006115796020836111f1565b915061158482611543565b602082019050919050565b600060208201905081810360008301526115a88161156c565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006115e5601b836111f1565b91506115f0826115af565b602082019050919050565b60006020820190508181036000830152611614816115d8565b9050919050565b6000819050919050565b61163661163182610e65565b61161b565b82525050565b60008160601b9050919050565b60006116548261163c565b9050919050565b600061166682611649565b9050919050565b61167e61167982610fd2565b61165b565b82525050565b60006116908286611625565b6020820191506116a082856113a1565b6020820191506116b0828461166d565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b600061171d6033836111f1565b9150611728826116c1565b604082019050919050565b6000602082019050818103600083015261174c81611710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061178d82610ec8565b915061179883610ec8565b92508282019050808211156117b0576117af611753565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006117fe826117e5565b915061ffff820361181257611811611753565b5b600182019050919050565b600061182882610ec8565b915061183383610ec8565b925082820390508181111561184b5761184a611753565b5b92915050565b61185a81610ec8565b82525050565b6000604082019050611875600083018561108b565b6118826020830184611851565b9392505050565b82818337600083830152505050565b60006118a483856112f4565b93506118b1838584611889565b82840190509392505050565b60006118ca828587611898565b91506118d682846113a1565b602082019150819050949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b60006008830261196e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611931565b6119788683611931565b95508019841693508086168417925050509392505050565b6000819050919050565b60006119b56119b06119ab84610ec8565b611990565b610ec8565b9050919050565b6000819050919050565b6119cf8361199a565b6119e36119db826119bc565b84845461193e565b825550505050565b600090565b6119f86119eb565b611a038184846119c6565b505050565b5b81811015611a2757611a1c6000826119f0565b600181019050611a09565b5050565b601f821115611a6c57611a3d816112ff565b611a4684611921565b81016020851015611a55578190505b611a69611a6185611921565b830182611a08565b50505b505050565b600082821c905092915050565b6000611a8f60001984600802611a71565b1980831691505092915050565b6000611aa88383611a7e565b9150826002028217905092915050565b611ac1826118e7565b67ffffffffffffffff811115611ada57611ad96118f2565b5b611ae482546112c3565b611aef828285611a2b565b600060209050601f831160018114611b225760008415611b10578287015190505b611b1a8582611a9c565b865550611b82565b601f198416611b30866112ff565b60005b82811015611b5857848901518255600182019150602085019450602081019050611b33565b86831015611b755784890151611b71601f891682611a7e565b8355505b6001600288020188555050505b505050505050565b611b9381610fd2565b82525050565b6000606082019050611bae600083018661108b565b611bbb6020830185611b8a565b611bc86040830184611851565b94935050505056fea2646970667358221220edcb93a67aab1506665a2a6b0b40c4a620f728d32ab4345732acbd57b494d2f964736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +}